#eqprofile #begin #description Эмулятор ФР #name Эмулятор ФР #code 0000000001 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом работы с ФР. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо активизировать устройство ФР./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо деактивировать устройство ФР./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо получить номер текущей смены в ФР./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное номеру смены./##CHR(13)##//##CHR(10)##/RETURN ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо получить текущий номер чека в ФР./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное номеру чека./##CHR(13)##//##CHR(10)##/RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент открытия нового чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое тип текущего чека,/##CHR(13)##//##CHR(10)##///Склад - строка код склада, на котором производится регистрация,/##CHR(13)##//##CHR(10)##///КодТовара строка, код регистрируемых ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///ЦенаДляПечати число вещественное, цена дял печати в чеке,/##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ШтрихКод строка, прочитанный штриховой код ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Клиент код контрагента из справочника, зарегистрированного в операции,/##CHR(13)##//##CHR(10)##///Карта строка номер карты контрагента/##CHR(13)##//##CHR(10)##///ТипСкидки число целое, тип используемой скидки/##CHR(13)##//##CHR(10)##///ЗначениеСкидки число вещественное./##CHR(13)##//##CHR(10)##///ПереноситьСлова логическое, ИСТИНА, если надо переносить строки по словам, иначе ЛОЖЬ/##CHR(13)##//##CHR(10)##///СсылкаНаЧек число целое идентификатор чека в списке чеков./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо выполнить регистрацию продажи./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое тип текущего чека,/##CHR(13)##//##CHR(10)##///Склад - строка код склада, на котором производится регистрация,/##CHR(13)##//##CHR(10)##///КодТовара строка, код возвращаемых ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///ЦенаДляПечати число вещественное, цена дял печати в чеке,/##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ШтрихКод строка, прочитанный штриховой код ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Клиент код контрагента из справочника, зарегистрированного в операции,/##CHR(13)##//##CHR(10)##///Карта строка номер карты контрагента/##CHR(13)##//##CHR(10)##///ТипСкидки число целое, тип используемой скидки/##CHR(13)##//##CHR(10)##///ЗначениеСкидки число вещественное./##CHR(13)##//##CHR(10)##///ПереноситьСлова логическое, ИСТИНА, если надо переносить строки по словам, иначе ЛОЖЬ/##CHR(13)##//##CHR(10)##///СсылкаНаЧек число целое идентификатор чека в списке чеков./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент, когда необходимо выполнить возврат продажи./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное,/##CHR(13)##//##CHR(10)##///ТипЗакрытия число целое./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент закрытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКодОборудования + "''" );',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное,/##CHR(13)##//##CHR(10)##///ТипЗакрытия число целое./##CHR(13)##//##CHR(10)##///Обработка вызывается в момент закрытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКодОборудования + "''" );//Оплата со сдачей./##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET ecrsession = ecrsession + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( "Смена успешно закрыта. Следующший номер смены " + ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'19.12.2016 12:11:26') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Эмулятор ФР','ФР',0.00000000,'',0.00000000,14.00000000,0,'',0.00000000,'','',0,'E82871C0-27AA-49FB-BBDE-6DF7ABF3F86A',0,1,0,'19.12.2016 12:11:26') #begin #description Обмен данными с Фронтол CE. #name Обмен данными с Фронтол CE. #code 0000000002 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/// obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/// ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/// ware.group_ /##CHR(13)##//##CHR(10)##/// FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/// LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/// LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/// mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/// mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/// mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/// mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/// IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/// ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/// WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/// ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/// ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/// counter = 1;/##CHR(13)##//##CHR(10)##/// WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/// mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/// WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/// aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/// mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/// counter++;/##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/// ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// mDiscount = discount;/##CHR(13)##//##CHR(10)##/// mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_condition )/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/// mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mDiscount = "";/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", "1" );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/// В СЕ не используется IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/// В СЕ не используется IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + barcode + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.02.2016 11:16:44') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол CE.','ККМ',0.00000000,'',0.00000000,14.00000000,0,'',0.00000000,'','',0,'C40E4679-C180-46FA-AD38-27D2D1F66637',0,1,0,'02.02.2016 11:16:44') #begin #description Обмен данными с Фронтол. WIN32 V2 #name Обмен данными с Фронтол. WIN32 V2 #code 0000000003 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = ЛЕВСИМВ( ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ТоварИнфо.volweight ), 100 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ЛЕВСИМВ( ALLTRIM( cname ), 100 );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = ЕСЛИ( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ДЕЛИТЬДОКУМЕНТЫПОРМ = false;/##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо делить документы по рабочим местам, то преобразуем код ФР в новое значение по формуле/##CHR(13)##//##CHR(10)##/ IF ( _ДЕЛИТЬДОКУМЕНТЫПОРМ )/##CHR(13)##//##CHR(10)##/ ecrNumber = STR( PosNumber * 100 + VAL( ecrNumber ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.04.2019 18:56:14') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2','ККМ',0.00000000,'',0.00000000,19.00000000,0,'',0.00000000,'','',0,'09C1C5C0-E978-4F2A-AFC5-1150989D5F24',0,1,0,'18.04.2019 18:56:14') #begin #description Весы с ПЭ (драйвер АТОЛ) #name Весы с ПЭ (драйвер АТОЛ) #code 0000000004 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE;/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverSCALE") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ driverSCALE.currentDeviceNumber= НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( товары )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) driverSCALE.Clear( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/driverSCALE.PLU = ПЛУ;/##CHR(13)##//##CHR(10)##/driverSCALE.ICode = VAL( КОД );/##CHR(13)##//##CHR(10)##/driverSCALE.Price = ЦЕНА;/##CHR(13)##//##CHR(10)##/driverSCALE.Name = LEFT( ALLTRIM( НАИМЕНОВАНИЕ ), 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.Name2 = SUBSTR( ALLTRIM( НАИМЕНОВАНИЕ ), 29, 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.GCode = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/driverSCALE.Tare = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.Life = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/driverSCALE.WareType= ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',44.00000000,'//Подготовка выгрузки таблицы сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( сообщения )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 1;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',45.00000000,'//Выгрузка строки сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/mNote = STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/messageNum = 1;/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= 12 AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ else/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вычислить( "driverSCALE.MsgLine" + ALLTRIM( STR( messageNum ) ) + " = msgLine;" );/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',46.00000000,'//Окончание выгрузки таблицы сообщений в весы ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*------- Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverSCALE.currentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverSCALE.deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'02.12.2019 14:33:14') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер АТОЛ)','ВЕСЫ',0.00000000,'',0.00000000,5.00000000,0,'',0.00000000,'','',0,'40C05DF9-3979-43D3-95D0-2F94B2FA4A2E',0,1,0,'02.12.2019 14:33:14') #begin #description Профиль ТСД DataLogic #name Профиль ТСД DataLogic #code 0000000006 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД. Параметры НомерФормы целое число, НомерЗаписи целое число, НомерПоля целое число, ИмяПоля строка. Обработка вызывается для каждого поля каждой записи и должна вернуть значение указанного поля./##CHR(13)##//##CHR(10)##/IF ( ИндексПоля == 0 ) RETURN ШтрихКод;/##CHR(13)##//##CHR(10)##/IF ( ИндексПоля == 1 ) RETURN Количество;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД. Параметры - ПризнакОчистки логическое, НомерФормы число целое. Обработка вызывается один раз после обработки всех прочитанных строк из ТСД. Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ЗакрытьФайл( файлЗагрузки );/##CHR(13)##//##CHR(10)##/УдалитьФайл( "d:\file.txt" );',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей форме ТСД. /##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///НомерФормы. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть целое число равное количеству полей в таблице указанной формы ТСД./##CHR(13)##//##CHR(10)##/RETURN 2;',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД. Параметры - НомерФормы. Обработка должна вернуть целое число равное количеству строк в таблице указанной формы ТСД./##CHR(13)##//##CHR(10)##/RETURN КоличествоСтрокВФайле( файлЗагрузки );',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД. Параметры - НомерФормы целое число. Обработка вызывается перед началом загрузки данных из ТСД для каждой обрабатываемой формы. Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/Выполнить( "cmd", "/C copy d:\test\file.txt d:\", "", "", 3 );/##CHR(13)##//##CHR(10)##/PUBLIC файлЗагрузки;/##CHR(13)##//##CHR(10)##/файлЗагрузки = ОТКРЫТЬФАЙЛ( "d:\file.txt" );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД. Параметры - НомерФормы целое число, НомерЗаписи целое число. Обработка вызывается последовательно для чтения каждой записи из формы ТСД. Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/Строка = ПрочитатьФайл( файлЗагрузки, "S" );/##CHR(13)##//##CHR(10)##/ШтрихКод = ПОЛУЧИТЬСЛОВО( Строка, ''['','':'' );/##CHR(13)##//##CHR(10)##/Количество = ПОЛУЧИТЬСЛОВО( Строка, '':'','']'' );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:06:35') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД DataLogic','ТСД',0.00000000,'',0.00000000,5.00000000,0,'',0.00000000,'','',0,'AE9C2B50-318E-4116-9707-4386885A0F7F',0,1,0,'14.10.2014 11:41:26') #begin #description ТСД в формате GOODS #name ТСД в формате GOODS #code 0000000007 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1.00000000,'//Инициализация ТСД/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_ERRORSTRING, _GOODS_ERRORCODE;/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_GOODSPATH, _GOODS_ORDERSPATH;/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_PODBOROUTPATH;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_GOODS_GOODSPATH = "C:\GOODS\GOODS\";/##CHR(13)##//##CHR(10)##/_GOODS_PODBOROUTPATH = "C:\GOODS\PODBOR\OUT\";/##CHR(13)##//##CHR(10)##/_GOODS_PODBORINPATH = "C:\GOODS\PODBOR\IN\";/##CHR(13)##//##CHR(10)##/_GOODS_ORDERSPATH = "C:\GOODS\ORDERS\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_GOODS_ERRORSTRING = "Нет ошибок";/##CHR(13)##//##CHR(10)##/_GOODS_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',2.00000000,'//Очистка ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',3.00000000,'//Инициализация выгрузки в ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',6.00000000,'//Окончание выгрузки в ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Читаем все файлы из каталога GOODS\ORDERS/##CHR(13)##//##CHR(10)##/// Содержимое всех файлов переносим во временную таблицу /##CHR(13)##//##CHR(10)##/_GOODS_TEMP_TABLE = "#" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + _GOODS_TEMP_TABLE + "( docid int, ndok varchar(20), barcode varchar(50), cena float, kolp float, identity_column int IDENTITY(1,1) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлДокумента = ФайлНайти( _GOODS_ORDERSPATH + "*.*" );/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/ndok = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( ФайлДокумента ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docid++;/##CHR(13)##//##CHR(10)##/ ndok = SUBSTR( ФайлДокумента, RAT( ФайлДокумента, "\" ) + 1);/##CHR(13)##//##CHR(10)##/ IF ( AT( ndok, "." ) > 0 )/##CHR(13)##//##CHR(10)##/ ndok = SUBSTR( ndok, 1, AT( ndok, "." ) - 1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗагрузки = ФайлОткрыть( ФайлДокумента );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЗагрузки < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORSTRING = "Не удалось открыть файл для загрузки данных " + ФайлДокумента;/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORCODE = -2;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE( !ФайлКонецФайла( ФайлЗагрузки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаФайла = ФайлПрочитать( ФайлЗагрузки, "S" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СтрокаФайла ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаФайла = "," + СтрокаФайла;/##CHR(13)##//##CHR(10)##/ barcode = GetWord( СтрокаФайла, ",", ",", 1 );/##CHR(13)##//##CHR(10)##/ cena = VAL( GetWord( СтрокаФайла, ",", ",", 2 ) );/##CHR(13)##//##CHR(10)##/ kolp = VAL( GetWord( СтрокаФайла, ",", ",", 3 ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _GOODS_TEMP_TABLE + "( docid, ndok, barcode, cena, kolp ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + docid+ ", ''" + STDF( ndok, 20 ) + "'', ''" + STDF( barcode, 50 ) + "'', " + STR( cena, 20, 8 ) + ", " + STR( kolp, 20, 8 ) + ")" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##/ ФайлДокумента = ФайлНайтиСледующий( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Достаем данные из полученной временной таблицы/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT * FROM " + _GOODS_TEMP_TABLE + " ORDER BY identity_column", "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + _GOODS_TEMP_TABLE );',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/Перейти( НОМЕРЗАПИСИ - 1, "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( ИНДЕКСПОЛЯ == 0, docid, ЕСЛИ( ИНДЕКСПОЛЯ == 1, ndok, ЕСЛИ( ИНДЕКСПОЛЯ == 2, barcode, ЕСЛИ( ИНДЕКСПОЛЯ == 3, cena, kolp ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',11.00000000,'//Текст ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN _GOODS_ERRORSTRING;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',12.00000000,'//Признак наличия ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN _GOOSD_ERRORCODE <> 0;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##/RETURN 5;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##/RETURN КоличествоСтрок( "GOODS_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Обработка выгрузки данных в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Инициализация ТСД/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_ERRORSTRING, _GOODS_ERRORCODE;/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_GOODSPATH, _GOODS_ORDERSPATH;/##CHR(13)##//##CHR(10)##/PUBLIC _GOODS_PODBOROUTPATH;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_GOODS_GOODSPATH = "C:\GOODS\GOODS\";/##CHR(13)##//##CHR(10)##/_GOODS_PODBOROUTPATH = "C:\GOODS\PODBOR\OUT\";/##CHR(13)##//##CHR(10)##/_GOODS_PODBORINPATH = "C:\GOODS\PODBOR\IN\";/##CHR(13)##//##CHR(10)##/_GOODS_ORDERSPATH = "C:\GOODS\ORDERS\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_GOODS_ERRORSTRING = "Нет ошибок";/##CHR(13)##//##CHR(10)##/_GOODS_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Все действия по выгрузке товаров и / или накладной производим в этом методе./##CHR(13)##//##CHR(10)##/// Если передан идентификатор накладной, то выгружаем документ. /##CHR(13)##//##CHR(10)##/// Иначе выгружаем список переданных товаров/##CHR(13)##//##CHR(10)##/IF ( _DOCID == 0 OR ПУСТО( _DOCCODE ) == "" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT nn, name, cena FROM " + _ИМЯТАБЛИЦЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяФайла = _GOODS_GOODSPATH + "GOODS.TXT";/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки = ФайлСоздать( ИмяФайла, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ФайлВыгрузки 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORSTRING = "Не удалось создать файл для выгрузки данных " + ИмяФайла;/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORCODE = -1;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT bc AS barcode FROM sprnnbc WHERE nn= ''" + СписокТоваров.nn + "'' AND bc <> '''' /##CHR(13)##//##CHR(10)##/ UNION SELECT barcode FROM sprres_ed WHERE code= ''" + СписокТоваров.nn + "'' AND barcode <> ''''", "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокШтриховыхКодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + "," + STR( СписокТоваров.cena, 10, 2 ) + "," + ALLTRIM( STRTRAN( СписокТоваров.name, ",", "" ) ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Определяем номер выгружаемого документа. Файл бедет создан с таким же именем/##CHR(13)##//##CHR(10)##/ НомерДокумента = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + _DOCCODE + "'' AND ic= " + _DOCID );/##CHR(13)##//##CHR(10)##/ ИмяФайла = ЕСЛИ( _DOCCODE == "001" OR _DOCCODE == "019", _GOODS_PODBORINPATH, _GOODS_PODBOROUTPATH ) + ALLTRIM( НомерДокумента ) + ".txt";/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT nn, cena, kolp, identity_column/##CHR(13)##//##CHR(10)##/ FROM spec000 /##CHR(13)##//##CHR(10)##/ WHERE code = ''" + _DOCCODE + "'' AND ic = " + _DOCID, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки = ФайлСоздать( ИмяФайла, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ФайлВыгрузки 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORSTRING = "Не удалось создать файл для выгрузки данных " + ИмяФайла;/##CHR(13)##//##CHR(10)##/ _GOODS_ERRORCODE = -1;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "Списоктоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если в документе указаны свои штриховые коды, то выгружем их/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT barcode, kolp /##CHR(13)##//##CHR(10)##/ FROM barcodes /##CHR(13)##//##CHR(10)##/ WHERE code = ''" + _DOCCODE + "'' AND ic = " + _DOCID + " AND spec_ic = " + СписокТоваров.identity_column, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСтрок( "СписокШтриховыхКодов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокШтриховыхКодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокШтриховыхКодов.barcode ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + "," + STR( СписокТоваров.cena, 10, 2 ) + "," + STR( СписокШтриховыхКодов.kolp, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтриховойКод = ЗАПРОС( "SELECT MIN( bc ) FROM sprnnbc WHERE nn = ''" + СписокТоваров.nn + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT MIN( barcode ) FROM sprres_ed WHERE code= ''" + СписокТоваров.nn + "'' ");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтриховойКод ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ФайлВыгрузки, ALLTRIM( ШтриховойКод ) + "," + STR( СписокТоваров.cena, 10, 2 ) + "," + STR( СписокТоваров.kolp, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлВыгрузки );',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( ИНДЕКСПОЛЯ == 0, "docid", ЕСЛИ( ИНДЕКСПОЛЯ == 1, "ndok", ЕСЛИ( ИНДЕКСПОЛЯ == 2, "barcode", ЕСЛИ( ИНДЕКСПОЛЯ == 3, "cena", "kolp" ) ) ) );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( "Драйвер не предусматривает настройки свойств." );',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "ТСД GOODS";',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.06.2015 12:06:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','ТСД в формате GOODS','ТСД',0.00000000,'',0.00000000,28.00000000,0,'',0.00000000,'','',0,'66754BA7-2A7E-4AD0-82EB-A2599EA65B6F',0,1,0,'26.06.2015 12:06:57') #begin #description Профиль FPrint-03K (БЭТА-версия) #name Профиль FPrint-03K (БЭТА-версия) #code 0000000008 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.Session + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.CheckNumber;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus(); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument();/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString(); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем новый документ/##CHR(13)##//##CHR(10)##/// При этом, если предыдущий чек не был закрыт, он будет отменен/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/// Если открыть документ не удалось, выводим ошибку/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода NewDocument " + Driver.ResultCode + " при открытии чека" ); /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ТипЧека = 1, то это возврат/##CHR(13)##//##CHR(10)##/Driver.CheckType = IIF( ТипЧека == 1, 2, 1 );/##CHR(13)##//##CHR(10)##/Driver.OpenCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenCheck " + Driver.ResultCode + " при открытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Name = Наименование;/##CHR(13)##//##CHR(10)##/Driver.Quantity = ROUND( Количество, 3 );/##CHR(13)##//##CHR(10)##/Driver.Price = ROUND( Цена, 2 );/##CHR(13)##//##CHR(10)##/Driver.Department = 1; // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 1; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = ПроцентСкидки; // Значение скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Registration();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при регистрации" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Name = Наименование;/##CHR(13)##//##CHR(10)##/Driver.Quantity = ROUND( Количество, 3 );/##CHR(13)##//##CHR(10)##/Driver.Price = ROUND( ЦенаПродажи, 2 );/##CHR(13)##//##CHR(10)##/Driver.Department = 1; // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 1; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; //ПроцентСкидки; // Значение скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Return();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при возврате" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Процентная скидка на чек/##CHR(13)##//##CHR(10)##/// Значение скидки не может быть равным 0, поэтому используем условие/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Percents = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/ Driver.Destination = 0;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода PercentsDiscount " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode == 0 OR ПроцентСкидки <= 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Оплата/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаОплаты, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Частичная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.PartialCut();/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Процентная скидка на чек/##CHR(13)##//##CHR(10)##/// Значение скидки не может быть равным 0, поэтому используем условие/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Percents = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/ Driver.Destination = 0;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода PercentsDiscount " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode == 0 OR ПроцентСкидки <= 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Оплата/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаОплаты, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Частичная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.PartialCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Объявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/--MessageBox("Инициализация ФР");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC Driver;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проверяем на ошибку/##CHR(13)##//##CHR(10)##/IF ( TYPE( "Driver" ) != "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Не удалось создать объект драйвера" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Присваиваем логическому устройству индекс/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CurrentDeviceIndex " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'// Активизация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// Пароль строка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Активизация - устанавливается соединение с устройством/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Включаем устройство/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = TRUE;/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Connect " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние/##CHR(13)##//##CHR(10)##/Driver.GetStatus();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если чек открыт, отменяем/##CHR(13)##//##CHR(10)##/IF ( Driver.CheckState <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CancelCheck " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'// Деактивация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выключаем устройство/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Caption = СтрокаДляПечати;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати строки" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'/##CHR(13)##//##CHR(10)##/// Печать подвала чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции печати подвала требуется перейти в режим отчетов без гашения/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.PrintFooter();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати подвала чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипОтчета >= 7 AND ТипОтчета <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 5; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ RETURN Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем описание/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRErrorDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем метод/##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/LocalDriver.ShowProperties( );/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Имя текущего устройства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/CurrentDeviceName = LocalDriver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN CurrentDeviceName;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Количество устройств/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/DeviceCount = LocalDriver.DeviceCount;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN DeviceCount;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/Driver = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:08') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль FPrint-03K (БЭТА-версия)','ФР',0.00000000,'',0.00000000,6.00000000,0,'',0.00000000,'','',0,'8DDF94EE-AA4E-4B3A-A0AB-38D34DFAAB05',0,1,0,'14.01.2016 12:53:08') #begin #description Профиль КАСБИ ФР-01К #name Профиль КАСБИ ФР-01К #code 0000000009 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "AddIN.KSBFR1K", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.CRMIndex = НомерУстройства - 1; // Номер отличается от индекса на 1/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.Connect( ); /##CHR(13)##//##CHR(10)##/// Метод метод соединения с ФР может вызываться многократно, а метод Connect может быть вызван один раз/##CHR(13)##//##CHR(10)##/// При повторном вызове он вернет ошибку 211 (Порт уже открыт)/##CHR(13)##//##CHR(10)##/_ERROR = resultCode <> 0 AND resultCode <> 211;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode >= 7 AND driverKKM.CRMMode <= 9 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.CheckNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.password = VAL( Пароль );/##CHR(13)##//##CHR(10)##/driverKKM.GetCRMStatus( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = "Открытие смены " + STR( VAL( driverKKM.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = "Текущий номер чека " + STR( VAL( driverKKM.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.printServiceDoc( );/##CHR(13)##//##CHR(10)##/driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.sum1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.sum1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/driverKKM.Test = 0;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/driverKKM.Caption = LEFT( НАИМЕНОВАНИЕ, 23 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GoodsGroup = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Section = 1;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = 0;//-ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = -ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/driverKKM.Caption = LEFT( НАИМЕНОВАНИЕ, 23 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GoodsGroup = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Section = 1;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = 0; //-ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Sum1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Sum2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = -ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 2 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Sum1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Sum2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = -ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 2 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Caption = Строка;/##CHR(13)##//##CHR(10)##/driverKKM.printString( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.PrintServiceDoc( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА >= 7 AND ТИПОТЧЕТА <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 8 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintTellerReport() <> 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 9 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintGoodsGroupReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCRMStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.CRMMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.errorMessage;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "КАСБИ ФР-01К";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "AddIN.KSBFR1K", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ServiceWindow( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CRMIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.CRMName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.CRMCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:40:58') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль КАСБИ ФР-01К','ФР',0.00000000,'',0.00000000,12.00000000,0,'',0.00000000,'','',0,'5070FEA6-91CF-497C-99CF-00A96B1B972B',0,1,0,'07.04.2015 14:40:58') #begin #description Профиль СП101ФР-К (драйвер OPOS) #name Профиль СП101ФР-К (драйвер OPOS) #code 0000000010 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ, СУММАОПЛАТЫ, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##///driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode <> 0;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "СП101ФР-К";',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Сообщение("Для настройки драйвера запустите служебную утилиту OPOSConfog.exe");/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "СП101ФР-К";',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );/##CHR(13)##//##CHR(10)##/// Закрываем драйвер/##CHR(13)##//##CHR(10)##/driverKKMSP101.Close( )/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 1 - номер смены/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/ТипЗапроса = "1";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 7 - номер чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/ТипЗапроса = "7";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ, СУММАОПЛАТЫ, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 40;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.printNormal( 2, Строка ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.EndNonFiscal( )',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintXReport( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintZReport( );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипЗапроса = "1";/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN VAL( ТипЗапроса );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.errorMessage;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 4; // 4- FPTR_RT_SALES/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKMSP101;/##CHR(13)##//##CHR(10)##/driverKKMSP101 = СоздатьОбъект( "OPOS.FiscalPrinter", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKMSP101") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.Open("SPFR101") <> 0;',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.Claimed )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.ClaimDevice( 1000 );/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.DeviceEnabled )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не получилось активировать устройство, то возвращаем ошибку/##CHR(13)##//##CHR(10)##/_ERROR = !driverKKMSP101.DeviceEnabled;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, "Открытие смены " + STR( НомерСмены ) ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, Заголовок ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndNonFiscal( )/##CHR(13)##//##CHR(10)##/',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 1; // 1- FPTR_RT_CASH_IN, 2 - FPTR_RT_CASH_OUT/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 2; // 2 - FPTR_RT_CASH_OUT, 1- FPTR_RT_CASH_IN/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );',0,0,1,0,'26.01.2012 10:08:41') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль СП101ФР-К (драйвер OPOS)','ФР',0.00000000,'',0.00000000,13.00000000,0,'',0.00000000,'','',0,'B4E55C93-61F1-4E44-B6C6-092EA4BF8191',0,1,0,'12.03.2014 19:54:50') #begin #description Профиль Штрих ФР #name Профиль Штрих ФР #code 0000000011 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##/ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##/PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##/ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Печать может производиться на несколько ФР. Поэтому надо выбрать нужный и к нему подключиться/##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = НОМЕРУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:38') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Штрих ФР','ФР',0.00000000,'',0.00000000,17.00000000,0,'',0.00000000,'','',0,'FE5FF20A-24ED-4BF7-AD96-D2FD1829677E',0,1,0,'06.11.2016 23:25:38') #begin #description Профиль Меркурий ФР #name Профиль Меркурий ФР #code 0000000012 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "КАСБИ ФР-01К";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "AddIN.KSBFR1K", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ServiceWindow( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CRMIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.CRMName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.CRMCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Incotex.MercuryFPrtCOM", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/ // Устанавливаем параметры соединения с ФР/##CHR(13)##//##CHR(10)##/ driverKKM.PortNum = 1; // Номер порта, к которому подключен ФР, задаем здесь, т.к. в справочнике нет стандартного поля для этого номера/##CHR(13)##//##CHR(10)##/ driverKKM.BaudRate = 115200; // скорость обмена данными с ФР, задаем здесь, т.к. в справочнике нет стандартного поля для этого номера/##CHR(13)##//##CHR(10)##/ driverKKM.Password = ПАРОЛЬ;/##CHR(13)##//##CHR(10)##/ driverKKM.Open( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Произошла ошибка подключения к ККМ. Сообщаем об этом/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка подключения к ККМ. " + _OLEERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/resultCode = driverKKM.errCode( ); /##CHR(13)##//##CHR(10)##/// Метод метод соединения с ФР может вызываться многократно, а метод Open может быть вызван один раз/##CHR(13)##//##CHR(10)##/// При повторном вызове он вернет ошибку 1 (Порт уже открыт)/##CHR(13)##//##CHR(10)##/_ERROR = resultCode <> 0 AND resultCode <> 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode >= 7 AND driverKKM.CRMMode <= 9 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.CRMMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.CheckNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.password = VAL( Пароль );/##CHR(13)##//##CHR(10)##/driverKKM.GetCRMStatus( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = "Открытие смены " + STR( VAL( driverKKM.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = "Текущий номер чека " + STR( VAL( driverKKM.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/driverKKM.printString( );/##CHR(13)##//##CHR(10)##/driverKKM.printServiceDoc( );/##CHR(13)##//##CHR(10)##/driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.sum1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.sum1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/driverKKM.Test = 0;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/driverKKM.Caption = LEFT( НАИМЕНОВАНИЕ, 23 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GoodsGroup = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Section = 1;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = 0;//-ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = -ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/driverKKM.Caption = LEFT( НАИМЕНОВАНИЕ, 23 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GoodsGroup = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Section = 1;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = 0; //-ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Sum1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Sum2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = -ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 2 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/driverKKM.Sum1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Sum2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Sum4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscount = 0;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountPercent = -ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.ChargeDiscountSum = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortCRMStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.CRMAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 2 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Caption = Строка;/##CHR(13)##//##CHR(10)##/driverKKM.printString( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.PrintServiceDoc( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА >= 7 AND ТИПОТЧЕТА <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 8 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintTellerReport() <> 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 9 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintGoodsGroupReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCRMStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.CRMMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrMessage;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.04.2015 14:41:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Меркурий ФР','ФР',0.00000000,'',0.00000000,12.00000000,0,'',0.00000000,'','',0,'C03529D9-FEA2-492F-946C-AEAB3C1A1539',0,1,0,'07.04.2015 14:41:23') #begin #description Обмен данными с Фронтол. WIN32 V2 (без повторной загрузки транзакций) #name Обмен данными с Фронтол. WIN32 V2 (без повторной загрузки транзакций) #code 0000000013 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) +IIF(IN_PARAM_NAME_WEIGHT == 0, "", /##CHR(13)##//##CHR(10)##/ " "+ ALLTRIM(QUERY("SELECT CASE WHEN d_litr <> 0 THEN str(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN str(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END FROM sprnn WHERE maincode = ''" + code + "''" ) ) );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = cardn;/##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##/БылиНовыеТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Проверяем наличие обработанной загружаемой транзакции в таблице транзакций/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS( /##CHR(13)##//##CHR(10)##/ SELECT * /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt /##CHR(13)##//##CHR(10)##/ WHERE tranzcount = " + tranzCount + " AND equipment = ''" + КОДОБОРУДОВАНИЯ + "'' AND DATEDIFF( day, tranztime, ''" + tranzDate + "'') = 0 ) THEN 1 ELSE 0 END" ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиНовыеТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##/ELSE IF ( !БылиНовыеТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены новые транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:35:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (без повторной загрузки транзакций)','ККМ',0.00000000,'',0.00000000,13.00000000,0,'',0.00000000,'','',0,'55981260-7FAF-40A1-BA2C-4A8E2F3E7877',0,1,0,'26.12.2018 15:35:51') #begin #description Обмен данными с Фронтол с проверкой периода. #name Обмен данными с Фронтол с проверкой периода. #code 0000000014 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/IF ( IN_PARAM_NAME_WEIGHT != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбъемВес = STR( ЗАПРОС("SELECT CASE WHEN d_litr <> 0 THEN d_litr/##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN weight/##CHR(13)##//##CHR(10)##/ ELSE 0 END /##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE maincode = ''" + code + "''" ), 10, 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( AT( ОбъемВес, "." ) > 0 ) WHILE ( RIGHT( ОбъемВес, 1 ) == "0" ) ОбъемВес= LEFT( ОбъемВес, LEN( ОбъемВес ) - 1 );/##CHR(13)##//##CHR(10)##/ // Если убрали все нули в конце/##CHR(13)##//##CHR(10)##/ IF ( RIGHT( ОбъемВес, 1 ) == "." ) ОбъемВес= LEFT( ОбъемВес, LEN( ОбъемВес ) - 1 );/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъемВес = ЗАПРОС("SELECT CASE WHEN d_litr <> 0 THEN edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END /##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE maincode = ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ mName = ALLTRIM( name ) + ЕСЛИ( ОбъемВес == "0", "", " " + ОбъемВес + " " + ЕдиницаОбъемВес );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если в окне параметров был указан период, то проверяем загружаемую транзакцию на соответствие/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 OR ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку, т.к. она не "новая"/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если транзакция выходит за пределы периода, то пропускаем/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( date < НАЧАЛОПЕРИОДА OR date > КОНЕЦПЕРИОДА ) CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( ecrSession ) < VAL( ПЕРВАЯСМЕНА ) OR VAL( ecrSession ) > VAL( ПОСЛЕДНЯЯСМЕНА ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ""/##CHR(13)##//##CHR(10)##/ s_code = ""/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1)/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = cardn;/##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:42:17') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол с проверкой периода.','ККМ',0.00000000,'',0.00000000,4.00000000,0,'',0.00000000,'','',0,'E6FB89A0-8C01-4846-A2F6-49A8D7BCE5AC',0,1,0,'26.12.2018 16:42:17') #begin #description Обмен данными с Фронтол. WIN32 V2 (количество из документов) #name Обмен данными с Фронтол. WIN32 V2 (количество из документов) #code 0000000017 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 2 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров. Из документов всегда добавляем остаток/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1 AND ПУСТО( КОДДОКУМЕНТА ), "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/// Добавляем в список товары ингредиенты из выпуска и комплектации/##CHR(13)##//##CHR(10)##/IF ( КОДДОКУМЕНТА == "009" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "/##CHR(13)##//##CHR(10)##/ SELECT s.code AS nn, s.ed_weight, s.group_ AS nngroup, ISNULL(sp.parent, -s.parent) AS parent, f_hchild, f_subres, /##CHR(13)##//##CHR(10)##/ s.subcode, s.d_code AS aspect, s.maincode AS code, s.a_code AS article, s.name, s.cena_sale AS cena, s.kodn, s.cat, /##CHR(13)##//##CHR(10)##/ s.checkprinter, s.fractqty, s.enterqty, s.shortname AS cname, store_period, equipment, s.note, s.min_cena, s.image_path,/##CHR(13)##//##CHR(10)##/ SPACE(250) AS barcode, s.maxdiscount, ISNULL( CASE WHEN g.fr_code='''' THEN ''0'' ELSE g.fr_code END, ''0'' ) AS nkkm, /##CHR(13)##//##CHR(10)##/ ISNULL( g.firm, '''' ) AS firm, ISNULL( g.kkm_section, '''' ) AS kkm_section, ISNULL( dsc.vtype, 0 ) AS vtype,/##CHR(13)##//##CHR(10)##/ CASE WHEN (SELECT f_weight FROM spredn WHERE code= s.ed) = 1 THEN 0 ELSE 1 END AS waretype, s.discount, /##CHR(13)##//##CHR(10)##/ ISNULL( dsc.value, '''' ) AS value, ISNULL( dsc.f_evaluate, 0 ) AS f_evaluate, s.identity_column /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g g ON s.group_ = g.code /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN spectree sp ON s.identity_column = sp.ic AND sp.folder = 0 AND /##CHR(13)##//##CHR(10)##/ sp.code = CASE WHEN s.cat = ''001'' THEN ''0000000001'' ELSE ''S050000001'' END AND/##CHR(13)##//##CHR(10)##/ sp.objcode= CASE WHEN s.cat = ''001'' THEN ''S02'' ELSE ''S05'' END AND sp.objtype = ''SPR''/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN specmdiscount dsc ON dsc.code = s.discount/##CHR(13)##//##CHR(10)##/ WHERE s.notavail= 0 AND ISNULL( g.f_nokkm, 0 ) = 0 AND s.code IN ( SELECT nn FROM spec009 WHERE ic= " + ИДДокумента + " AND f_make= 0 )/##CHR(13)##//##CHR(10)##/ ORDER BY CASE WHEN s.f_subres = 1 THEN s.subcode ELSE s.code END, CASE WHEN s.f_subres = 1 THEN 1 ELSE 0 END/##CHR(13)##//##CHR(10)##/ ", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/ mBarcode = ЗАПРОС( "SELECT barcode FROM " + ШТРИХКОДЫ + " WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ mName = ALLTRIM( name ) +IIF(IN_PARAM_NAME_WEIGHT == 0, "", /##CHR(13)##//##CHR(10)##/ " "+ ALLTRIM(QUERY("SELECT CASE WHEN d_litr <> 0 THEN str(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN str(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END FROM sprnn WHERE maincode = "+code)));/##CHR(13)##//##CHR(10)##/ // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/ mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = ALLTRIM( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/ mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) );/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ // Выгрузку производим из документа и количество берем из него же/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sklad, sklad_d FROM spr000 WHERE code= ''" + КОДДОКУМЕНТА + "'' AND ic= " + ИДДОКУМЕНТА, "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( СкладыДокумента.sklad == Склад OR СкладыДокумента.sklad_d == Склад )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМ = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN kolp ELSE 0 END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.nn + "''" );/##CHR(13)##//##CHR(10)##/ КоличествоП = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN 0 ELSE kolp END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.nn + "''" );/##CHR(13)##//##CHR(10)##/ Количество = ЕСЛИ( СкладыДокумента.sklad == Склад, -КоличествоМ, 0 ) + ЕСЛИ( СкладыДокумента.sklad_d == Склад, КоличествоП, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Количество = 0;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( Количество, 10, 3 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mPlu = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + СписокТоваров.cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + СписокТоваров.nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + СписокТоваров.cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + СписокТоваров.nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + СписокТоваров.cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + СписокТоваров.nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + СписокТоваров.cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + СписокТоваров.nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mBarcode + ";" + mName + ";" + mCname + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) +IIF(IN_PARAM_NAME_WEIGHT == 0, "", /##CHR(13)##//##CHR(10)##/ " "+ ALLTRIM(QUERY("SELECT CASE WHEN d_litr <> 0 THEN str(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN str(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END FROM sprnn WHERE maincode = ''" + code + "''" ) ) );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/// Если выгрузку производим из документа, то количество берем из него же/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sklad, sklad_d FROM spr000 WHERE code= ''" + КОДДОКУМЕНТА + "'' AND ic= " + ИДДОКУМЕНТА, "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ( INLIST( КОДДОКУМЕНТА, "001", "002", "003", "006", "008", "019", "055" ) AND СкладыДокумента.sklad == Склад ) OR /##CHR(13)##//##CHR(10)##/ ( КОДДОКУМЕНТА == "019" AND СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Количество = ЗАПРОС( "SELECT SUM( kolp ) FROM spec000 WHERE code= ''" + КОДДОКУМЕНТА + "'' AND ic= " + ИДДОКУМЕНТА + " AND nn= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ // Для докуемнтов, осуществляющих списание товаров, у количества меняем знак/##CHR(13)##//##CHR(10)##/ IF ( ( INLIST( КОДДОКУМЕНТА, "002", "008", "055", "019" ) AND СкладыДокумента.sklad == Склад ) OR/##CHR(13)##//##CHR(10)##/ ( КОДДОКУМЕНТА == "003" AND !ЗАПРОС( "SELECT f_income FROM spr003 WHERE identity_column= " + ИДДОКУМЕНТА ) ) )/##CHR(13)##//##CHR(10)##/ Количество = -Количество;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КОДДОКУМЕНТА == "021" AND ( СкладыДокумента.sklad == Склад OR СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМ = ЗАПРОС( "SELECT SUM( CASE WHEN priz = 0 THEN kolp ELSE 0 END ) FROM spec021 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ КоличествоП = ЗАПРОС( "SELECT SUM( CASE WHEN priz = 0 THEN 0 ELSE kolp END ) FROM spec021 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ Количество = ЕСЛИ( СкладыДокумента.sklad == Склад, -КоличествоМ, 0 ) + ЕСЛИ( СкладыДокумента.sklad_d == Склад, КоличествоП, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КОДДОКУМЕНТА == "009" AND ( СкладыДокумента.sklad == Склад OR СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМ = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN kolp ELSE 0 END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ КоличествоП = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN 0 ELSE kolp END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ Количество = ЕСЛИ( СкладыДокумента.sklad == Склад, -КоличествоМ, 0 ) + ЕСЛИ( СкладыДокумента.sklad_d == Склад, КоличествоП, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Количество = 0;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( Количество, 10, 3 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Количество = kolp;/##CHR(13)##//##CHR(10)##/ // Если выгрузку производим из документа, то количество берем из него же/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sklad, sklad_d FROM spr000 WHERE code= ''" + КОДДОКУМЕНТА + "'' AND ic= " + ИДДОКУМЕНТА, "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ( INLIST( КОДДОКУМЕНТА, "001", "002", "003", "006", "008", "019", "055" ) AND СкладыДокумента.sklad == Склад ) OR /##CHR(13)##//##CHR(10)##/ ( КОДДОКУМЕНТА == "019" AND СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Количество = ЗАПРОС( "SELECT SUM( kolp ) FROM spec000 WHERE code= ''" + КОДДОКУМЕНТА + "'' AND ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.subcode + "''" );/##CHR(13)##//##CHR(10)##/ // Для докуемнтов, осуществляющих списание товаров, у количества меняем знак/##CHR(13)##//##CHR(10)##/ IF ( ( INLIST( КОДДОКУМЕНТА, "002", "008", "055", "019" ) AND СкладыДокумента.sklad == Склад ) OR/##CHR(13)##//##CHR(10)##/ ( КОДДОКУМЕНТА == "003" AND !ЗАПРОС( "SELECT f_income FROM spr003 WHERE identity_column= " + ИДДОКУМЕНТА ) ) )/##CHR(13)##//##CHR(10)##/ Количество = -Количество;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КОДДОКУМЕНТА == "021" AND ( СкладыДокумента.sklad == Склад OR СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМ = ЗАПРОС( "SELECT SUM( CASE WHEN priz = 0 THEN kolp ELSE 0 END ) FROM spec021 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.subcode + "''" );/##CHR(13)##//##CHR(10)##/ КоличествоП = ЗАПРОС( "SELECT SUM( CASE WHEN priz = 0 THEN 0 ELSE kolp END ) FROM spec021 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.subcode + "''" );/##CHR(13)##//##CHR(10)##/ Количество = ЕСЛИ( СкладыДокумента.sklad == Склад, -КоличествоМ, 0 ) + ЕСЛИ( СкладыДокумента.sklad_d == Склад, КоличествоП, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КОДДОКУМЕНТА == "009" AND ( СкладыДокумента.sklad == Склад OR СкладыДокумента.sklad_d == Склад ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМ = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN kolp ELSE 0 END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.subcode + "''" );/##CHR(13)##//##CHR(10)##/ КоличествоП = ЗАПРОС( "SELECT SUM( CASE WHEN f_make = 0 THEN 0 ELSE kolp END ) FROM spec009 WHERE ic= " + ИДДОКУМЕНТА + " AND nn= ''" + СписокТоваров.subcode + "''" );/##CHR(13)##//##CHR(10)##/ Количество = ЕСЛИ( СкладыДокумента.sklad == Склад, -КоличествоМ, 0 ) + ЕСЛИ( СкладыДокумента.sklad_d == Склад, КоличествоП, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Количество = 0;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СкладыДокумента" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( Количество, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (количество из документов)','ККМ',0.00000000,'',0.00000000,23.00000000,0,'',0.00000000,'','',0,'698B3952-6E64-4479-AC2F-B7DC3E0AE890',0,1,0,'26.12.2018 15:36:57') #begin #description Профиль FPrint-03K с секцией из группы ресурсов, наценкой и скидкой #name Профиль FPrint-03K с секцией из группы ресурсов, наценкой и скидкой #code 0000000016 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Объявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/--MessageBox("Инициализация ФР");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC Driver;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проверяем на ошибку/##CHR(13)##//##CHR(10)##/IF ( TYPE( "Driver" ) != "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Не удалось создать объект драйвера" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Присваиваем логическому устройству индекс/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CurrentDeviceIndex " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'// Активизация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// Пароль строка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Активизация - устанавливается соединение с устройством/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Включаем устройство/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = TRUE;/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Connect " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние/##CHR(13)##//##CHR(10)##/Driver.GetStatus();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если чек открыт, отменяем/##CHR(13)##//##CHR(10)##/IF ( Driver.CheckState <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CancelCheck " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'// Деактивация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.Session + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.CheckNumber;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus(); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument();/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString(); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем новый документ/##CHR(13)##//##CHR(10)##/// При этом, если предыдущий чек не был закрыт, он будет отменен/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/// Если открыть документ не удалось, выводим ошибку/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода NewDocument " + Driver.ResultCode + " при открытии чека" ); /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ТипЧека = 1, то это возврат/##CHR(13)##//##CHR(10)##/Driver.CheckType = IIF( ТипЧека == 1, 2, 1 );/##CHR(13)##//##CHR(10)##/Driver.OpenCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenCheck " + Driver.ResultCode + " при открытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/Driver.Name = Наименование+'' ''+alltrim(Единица);/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = Цена;/##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/Driver.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ); // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 0; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; // Значение скидки. Скидка и наценка начисляются в соответствующих обработках/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Registration();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при регистрации" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Name = Наименование;/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/Driver.Department = 1; // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 1; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; //ПроцентСкидки; // Значение скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Return();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при возврате" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Caption = СтрокаДляПечати;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати строки" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипОтчета >= 7 AND ТипОтчета <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 5; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ RETURN Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем описание/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRErrorDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем метод/##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/LocalDriver.ShowProperties( );/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Имя текущего устройства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/CurrentDeviceName = LocalDriver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN CurrentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Количество устройств/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/DeviceCount = LocalDriver.DeviceCount;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN DeviceCount;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/Driver = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:37') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль FPrint-03K с секцией из группы ресурсов, наценкой и скидкой','ФР',0.00000000,'',0.00000000,6.00000000,0,'',0.00000000,'','',0,'C4CB1141-B6A4-41A1-9E13-8EA9BC43A06C',0,1,0,'14.01.2016 12:53:37') #begin #description Профиль FPrint-03K с именем кассира и номером документа основания #name Профиль FPrint-03K с именем кассира и номером документа основания #code 0000000018 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Объявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/--MessageBox("Инициализация ФР");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC Driver, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проверяем на ошибку/##CHR(13)##//##CHR(10)##/IF ( TYPE( "Driver" ) != "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Не удалось создать объект драйвера" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Присваиваем логическому устройству индекс/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CurrentDeviceIndex " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'// Активизация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// Пароль строка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Активизация - устанавливается соединение с устройством/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Включаем устройство/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = TRUE;/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Connect " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние/##CHR(13)##//##CHR(10)##/Driver.GetStatus();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если чек открыт, отменяем/##CHR(13)##//##CHR(10)##/IF ( Driver.CheckState <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CancelCheck " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'// Деактивация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.Session + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.CheckNumber;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus(); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument();/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString(); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем новый документ/##CHR(13)##//##CHR(10)##/// При этом, если предыдущий чек не был закрыт, он будет отменен/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/// Если открыть документ не удалось, выводим ошибку/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода NewDocument " + Driver.ResultCode + " при открытии чека" ); /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ТипЧека = 1, то это возврат/##CHR(13)##//##CHR(10)##/Driver.CheckType = IIF( ТипЧека == 1, 2, 1 );/##CHR(13)##//##CHR(10)##/Driver.OpenCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenCheck " + Driver.ResultCode + " при открытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В верху чека выведем имя кассира и номер связанного документа/##CHR(13)##//##CHR(10)##/Driver.Caption = "Кассир:" + _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ДокументоИнфо.ndok;/##CHR(13)##//##CHR(10)##/ ДатаДокумента = ДокументоИнфо.date;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "Товарный чек № " + НомерДокумента + " от " + DTOC( ДатаДокумента );/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/Driver.Name = Наименование+'' ''+alltrim(Единица);/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = Цена;/##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/Driver.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ); // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 0; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; // Значение скидки. Скидка и наценка начисляются в соответствующих обработках/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Registration();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при регистрации" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Name = Наименование;/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/Driver.Department = 1; // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 1; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; //ПроцентСкидки; // Значение скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Return();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при возврате" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Caption = СтрокаДляПечати;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати строки" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипОтчета >= 7 AND ТипОтчета <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 5; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ RETURN Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем описание/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRErrorDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем метод/##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/LocalDriver.ShowProperties( );/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Имя текущего устройства/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/CurrentDeviceName = LocalDriver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN CurrentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем локальную версию драйвера и вызываем свойство/##CHR(13)##//##CHR(10)##/// Количество устройств/##CHR(13)##//##CHR(10)##/LocalDriver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/DeviceCount = LocalDriver.DeviceCount;/##CHR(13)##//##CHR(10)##/LocalDriver = false;/##CHR(13)##//##CHR(10)##/RETURN DeviceCount;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/Driver = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:53:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль FPrint-03K с именем кассира и номером документа основания','ФР',0.00000000,'',0.00000000,26.00000000,0,'',0.00000000,'','',0,'591B4EC8-5CED-446F-9E4B-2A5DC9E3C52C',0,1,0,'14.01.2016 12:53:23') #begin #description Профиль Fprint с секцией из группы ресурсов, наценкой и скидкой, имя кассира и номер документа #name Профиль Fprint с секцией из группы ресурсов, наценкой и скидкой, имя кассира и номер документа #code 0000000019 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Name = Наименование;/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/Driver.Department = 1; // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 1; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; //ПроцентСкидки; // Значение скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Return();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при возврате" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Caption = СтрокаДляПечати;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати строки" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипОтчета >= 7 AND ТипОтчета <= 9 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 5; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ RETURN Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем описание/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRErrorDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем информацию об ошибке, возвращаем код/##CHR(13)##//##CHR(10)##/Driver.GetLastError();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) Driver.GetStatus(); // Если предыдущий метод не поддерживается, используем этот/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.ECRError <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DestroyObjectOnExit = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем при условии, что объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF ( TYPE( "Driver" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DestroyObjectOnExit = TRUE;/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver.ShowProperties();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Driver.DeviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/Driver = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Объявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/--MessageBox("Инициализация ФР");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC Driver, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проверяем на ошибку/##CHR(13)##//##CHR(10)##/IF ( TYPE( "Driver" ) != "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Не удалось создать объект драйвера" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Присваиваем логическому устройству индекс/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CurrentDeviceIndex " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'// Активизация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// Пароль строка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Активизация - устанавливается соединение с устройством/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Включаем устройство/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = TRUE;/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Connect " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние/##CHR(13)##//##CHR(10)##/Driver.GetStatus();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если чек открыт, отменяем/##CHR(13)##//##CHR(10)##/IF ( Driver.CheckState <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CancelCheck " + Driver.ResultCode + " при выполнении активизации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'// Деактивация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = FALSE;/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выполнении деактивации ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.SessionNumber + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/RETURN Driver.CheckNumber;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus(); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument();/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.SessionNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString(); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем новый документ/##CHR(13)##//##CHR(10)##/// При этом, если предыдущий чек не был закрыт, он будет отменен/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/// Если открыть документ не удалось, выводим ошибку/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода NewDocument " + Driver.ResultCode + " при открытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ТипЧека = 1, то это возврат/##CHR(13)##//##CHR(10)##/Driver.CheckType = IIF( ТипЧека == 1, 2, 1 );/##CHR(13)##//##CHR(10)##/Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenCheck " + Driver.ResultCode + " при открытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В верху чека выведем имя кассира и номер связанного документа/##CHR(13)##//##CHR(10)##/Driver.Caption = "Кассир: " + _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##/Driver.Caption = "================================================";/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Driver.Caption = "Документ № " + ALLTRIM( STR( VAL( Driver.CheckNumber ) + 1 ) ) + " от " + DTOC( Дата( ) );/##CHR(13)##//##CHR(10)##///Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ДокументоИнфо.ndok;/##CHR(13)##//##CHR(10)##/ ДатаДокумента = ДокументоИнфо.date;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "Товарный чек № " + НомерДокумента + " от " + DTOC( ДатаДокумента );/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##///Driver.Name = Наименование+'' ''+alltrim(Единица);/##CHR(13)##//##CHR(10)##/Driver.Name = Наименование+'' ''+chr(13)+("Код: "+КОД);/##CHR(13)##//##CHR(10)##/Driver.Quantity = Количество;/##CHR(13)##//##CHR(10)##/Driver.Price = Цена;/##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/Driver.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ); // Секция/##CHR(13)##//##CHR(10)##/Driver.DiscountType = 0; // Тип скидки - процентная скидка/##CHR(13)##//##CHR(10)##/Driver.DiscountValue = 0; // Значение скидки. Скидка и наценка начисляются в соответствующих обработках/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Registration();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при регистрации" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##/Driver.percents = ROUND( Процент, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.PercentsDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/Driver.summ = ROUND( Сумма, 2 );/##CHR(13)##//##CHR(10)##/Driver.Destination = Destination;/##CHR(13)##//##CHR(10)##/Driver.SummDiscount( ) ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при закрытии чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##///Driver.PartialCut();/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед вызовов функции процентной скидки требуется перейти в режим регистрации/##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Оплата/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаНал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 0; // Тип оплаты - наличными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаБезнал, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 1; // Тип оплаты - безналичными/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( СуммаКредит, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = 2; // Тип оплаты - кредит/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода Payment " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.CloseCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода CloseCheck " + Driver.ResultCode + " при оплате со сдачей" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.01.2016 12:52:49') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Fprint с секцией из группы ресурсов, наценкой и скидкой, имя кассира и номер документа','ФР',0.00000000,'',0.00000000,6.00000000,0,'',0.00000000,'','',0,'3E224CE7-18EB-436D-8925-6849A772342E',0,1,0,'14.01.2016 12:52:49') #begin #description Весы с ПЭ (драйвер Mettler) #name Весы с ПЭ (драйвер Mettler) #code 0000000021 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN "METTLER-TOLEDO Tiger";',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ФайлТоледо;/##CHR(13)##//##CHR(10)##/// Объявляем функцию для передачи файла в весы/##CHR(13)##//##CHR(10)##///ФУНКЦИЯ EV_METTLER_TRANSFER( ИМЯФАЙЛА ) IN mettler.dll;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Файл = ФайлСоздать( "Transscale.ini" );/##CHR(13)##//##CHR(10)##/IF ( Файл < 0 ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( Файл, "trf.out" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( Файл, "1" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то сформируем файл с командой удаления всех товаров/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлСоздать( "trf.out" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( Файл, "D:A" );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Выполнить( "TransferPLU.exe" );/##CHR(13)##//##CHR(10)##/// EV_METTLER_TRANSFER( "Transscale.ini" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Создаем файл для записи в него выгружаемых товаров/##CHR(13)##//##CHR(10)##/ФайлТоледо = ФайлСоздать( "trf.out" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем строку в файл/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлТоледо, ПЛУ + "," + КОД + ",1," + STR( ЦЕНА, 10, 2 ) + ",0,0,0,0,0,0,0," + ЕСЛИ( ВЕСОВОЙ, "0", "1" ) + ",0," + ПЕРЕКОДИРОВАТЬ( НАИМЕНОВАНИЕ, "ANSI", "OEM" ) + ",") ;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлТоледо );/##CHR(13)##//##CHR(10)##///EV_METTLER_TRANSFER( "Transscale.ini" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Выполнить( "TransferPLU.exe" );',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.07.2015 10:54:24') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер Mettler)','ВЕСЫ',0.00000000,'',0.00000000,3038.00000000,0,'',0.00000000,'','',0,'A38AA632-8098-41C3-9F40-503AE0FBF2B7',0,1,0,'21.07.2015 10:54:24') #begin #description Весы с ПЭ DIGI SM-100 (драйвер сервис плюс) #name Весы с ПЭ DIGI SM-100 (драйвер сервис плюс) #code 0000000022 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/ДопКодОборудования = ЗАПРОС( "SELECT ex_code FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/ИмяФайлаВесов = "c:\SCALEUPLOAD\ExportDir\" + ЕСЛИ( !ПУСТО( ДопКодОборудования ), ДопКодОборудования, КодОборудования );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаВесов );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы с ПЭ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаВесов ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'13.07.2016 15:07:15') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/PREF = "A"; //Заголовок "A" – признак товарной позиции/##CHR(13)##//##CHR(10)##/SPLU = ПЛУ;//Номер PLU, 1…999997/##CHR(13)##//##CHR(10)##/SCODE = ALLTRIM(КОД);//Данные ШК /##CHR(13)##//##CHR(10)##/SCODE = PADL(SCODE,5);/##CHR(13)##//##CHR(10)##/SCODE = STRTRAN(SCODE," ","0");/##CHR(13)##//##CHR(10)##/SCODE = "23"+SCODE;/##CHR(13)##//##CHR(10)##/SPrice = ALLTRIM( STR( ЕСЛИ( ЦЕНА < 0.01, 1, ЦЕНА ), 8, 2 ) ); // Весы не загружают товар с нулевой ценой/##CHR(13)##//##CHR(10)##/SWareType = STR(waretype);//Тип товара (0 - весовой, 1 - штучный)/##CHR(13)##//##CHR(10)##/BASEPRICE = "0";//Ценовая база (0 - 1 Кг, 1 – 100 г)/##CHR(13)##//##CHR(10)##/SBESTBEFORE = STR(storeperiod);//Срок годности, дни/##CHR(13)##//##CHR(10)##/SName = LEFT( ALLTRIM( name ), 80 );//Наименование товара/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = PREF + ";" + SPLU + ";" + SCODE + ";" + SPrice + ";" + SWareType + ";" + /##CHR(13)##//##CHR(10)##/ BASEPRICE + ";" +SBESTBEFORE + ";" + SName; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования не указано выводить комментарии на этикетку, то и не выводим/##CHR(13)##//##CHR(10)##/IF ( !ЗАПРОС( "SELECT f_messages FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим примечание /##CHR(13)##//##CHR(10)##/Строка = "I;" + SPLU; /##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/mNote = STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/messageNum = 1;/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= 15 AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ else/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка += ";" + msgLine;/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// В конце необходимо добавить завершающую точку с запятой./##CHR(13)##//##CHR(10)##/Строка += ";";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'13.07.2016 15:07:15') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'13.07.2016 15:07:15') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = true',0,0,0,0,'13.07.2016 15:07:15') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'//Окончание работы с ВЕСАМИ С ПЭ/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );',0,0,0,0,'13.07.2016 15:07:15') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ DIGI SM-100 (драйвер сервис плюс)','ВЕСЫ',0.00000000,'',0.00000000,7.00000000,0,'',0.00000000,'','',0,'326698B1-7FC1-4354-AD17-E5DB60BC8C02',0,1,0,'13.07.2016 15:07:15') #begin #description Обмен данными с Фронтол CE Nova. #name Обмен данными с Фронтол CE Nova. #code 0000000023 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";;;;;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspsubname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:59') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол CE Nova.','ККМ',0.00000000,'',0.00000000,31.00000000,0,'',0.00000000,'','',0,'6348BDEA-19BD-4218-932C-D8AD2C76ACF8',0,1,0,'07.10.2016 11:24:59') #begin #description Обмен данными с Фронтол CE Nova (объекты скидок без товаров, а с картами). #name Обмен данными с Фронтол CE Nova (объекты скидок без товаров, а с картами). #code 0000000024 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspsubname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. /##CHR(13)##//##CHR(10)##/// Необходимо сгенерировать условия скидок, указав в качестве префикса номер карты/##CHR(13)##//##CHR(10)##///Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cnd.*, crd.cardn FROM " + УСЛОВИЯ + " cnd/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ОБЪЕКТЫ + " obj ON obj.discount = cnd.code/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON obj.card = crd.code/##CHR(13)##//##CHR(10)##/ WHERE obj.card <> ''''", "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/МаксимальныйКод = ЗАПРОС( "SELECT MAX( dbo.fn_chartoint( code ) ) FROM sprmdiscount " ) + 1;/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ КодУсловия = ALLTRIM( STR( МаксимальныйКод + НОМЕРСТРОКИ( "СписокУсловий" ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = cardn;/##CHR(13)##//##CHR(10)##/ mPrefix_max = cardn;/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + КодУсловия + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT obj.discount, ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON obj.card = crd.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";;;;;;;;;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/// Не используется в СЕ IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( РЕЖИМ <> "СКИДКИ" ) RETURN true;/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * /##CHR(13)##//##CHR(10)##/ FROM " + УСЛОВИЯ + " cnd /##CHR(13)##//##CHR(10)##/ WHERE ( card_state <> 1 OR prefix_min <> '''' OR prefix_max <> '''' ) AND /##CHR(13)##//##CHR(10)##/ NOT EXISTS( SELECT * FROM " + ОБЪЕКТЫ + " WHERE discount = cnd.code AND card <> '''' ) ", "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:24:37') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол CE Nova (объекты скидок без товаров, а с картами).','ККМ',0.00000000,'',0.00000000,32.00000000,0,'',0.00000000,'','',0,'81084F2B-8C32-4D12-8683-9456A104082E',0,1,0,'07.10.2016 11:24:37') #begin #description Сканер ШК для номеров карт #name Сканер ШК для номеров карт #code 0000000030 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',69.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в форме регистрации продаж./##CHR(13)##//##CHR(10)##/IF ( LEFT( ШтрихКод, 2 ) == "28" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ДОБАВИТЬКАРТУ", ШтрихКод );/##CHR(13)##//##CHR(10)##/ _DODEFAULT= false;/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/_DODEFAULT= true;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##///В приходной накладной ищем товар по ШК и увеличиваем реальное количество/##CHR(13)##//##CHR(10)##/IF ( КодОбъекта == "001" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT nn FROM sprnnbc WHERE bc= ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", "nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp" );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp", _ЗНАЧЕНИЕПОЛЯ + 1 );/##CHR(13)##//##CHR(10)##/ _DODEFAULT= false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/IF ( КодОбъекта == "002" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT nn FROM sprnnbc WHERE bc= ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", "nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "СписокШК", "Найден" );/##CHR(13)##//##CHR(10)##/ _DODEFAULT= false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/_DODEFAULT= true;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',68.00000000,'//Проверка прочитанного штрихового кода СКАНЕРОМ ШК./##CHR(13)##//##CHR(10)##/RETURN SUBSTR( barcode, 4 );',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для номеров карт','СКАНЕР',0.00000000,'',0.00000000,1033.00000000,0,'',0.00000000,'','',0,'59AB6022-4ECF-41F1-91D1-9ECB1DA6734A',0,1,0,'12.03.2014 19:55:23') #begin #description Сканер ШК для расходной накладной кладовщика #name Сканер ШК для расходной накладной кладовщика #code 0000000031 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##///В приходной накладной ищем товар по ШК и увеличиваем реальное количество/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодОбъекта == "002" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT nn FROM sprnnbc WHERE bc= ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", "nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "BCFound", "Найден" );/##CHR(13)##//##CHR(10)##/ _DODEFAULT= false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/_DODEFAULT= true;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для расходной накладной кладовщика','СКАНЕР',0.00000000,'',0.00000000,4069.00000000,0,'',0.00000000,'','',0,'DC1CF288-AE0A-4828-B14A-F0851F60FC43',0,1,0,'12.03.2014 19:55:23') #begin #description Сканер ШК для реального количества инвентаризации ТМЦ #name Сканер ШК для реального количества инвентаризации ТМЦ #code 0000000032 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##/// Если прочитали штрихкод в инвентаризации ТМЦ, то ищем его среди товаров /##CHR(13)##//##CHR(10)##/// Если находим, то запрашиваем количество, на которое надо увеличить реальное количество_DODEFAULT = true; // По умолчанию стандартная обработка/##CHR(13)##//##CHR(10)##/IF ( @КодДокумента == "007" AND СПИСОКОБЪЕКТОВ == false AND !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", " nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp_real" );/##CHR(13)##//##CHR(10)##/ РЕАЛЬНОЕКОЛИЧЕСТВО = _ЗНАЧЕНИЕПОЛЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ИНВЕНТАРИЗАЦИЯ_КОЛИЧЕСТВОТОВАРА''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp_real", РЕАЛЬНОЕКОЛИЧЕСТВО + ИНВЕНТАРИЗАЦИЯ_КОЛИЧЕСТВОТОВАРА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для реального количества инвентаризации ТМЦ','СКАНЕР',0.00000000,'',0.00000000,4085.00000000,0,'',0.00000000,'','',0,'B84212F7-E069-4A0F-8EB1-9AEF3CA0E571',0,1,0,'12.03.2014 19:55:23') #begin #description Сканер ШК для реального количества приходной накладной #name Сканер ШК для реального количества приходной накладной #code 0000000033 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##/// Если прочитали штрихкод в приходной накладной, то ищем его среди товаров накладной/##CHR(13)##//##CHR(10)##/// Если находим, то увеличиваем количество на 1/##CHR(13)##//##CHR(10)##/_DODEFAULT = true; // По умолчанию стандартная обработка/##CHR(13)##//##CHR(10)##/IF ( @КодДокумента == "001" AND СПИСОКОБЪЕКТОВ == false AND !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", " nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp" );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp", _ЗНАЧЕНИЕПОЛЯ + 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE // Иначе, добавляем строку в накладную/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT nn, maincode, code, name, kodn, ed, /##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_incena( nn, '''', ''" + sklad + "'', ''001'') AS incena/##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE nn= ''" + Товар + "''", "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ДобавитьСтроку" );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nn", ТоварИнфо.nn );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "a_code", ТоварИнфо.code );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "maincode", ТоварИнфо.maincode );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nnname", ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kodn", ТоварИнфо.kodn );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "ed", ТоварИнфо.ed );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_c", 1 );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_e", 1 );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp", 1 );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp", 0 );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena", ТоварИнфо.incena );/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "summa", 0 );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'12.03.2014 19:55:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для реального количества приходной накладной','СКАНЕР',0.00000000,'',0.00000000,18.00000000,0,'',0.00000000,'','',0,'2435873B-C057-4459-AC92-6DEA377E5B0E',0,1,0,'12.03.2014 19:55:23') #begin #description Передача данных в ПЧ АТОЛ #name Передача данных в ПЧ АТОЛ #code 0000000034 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/DOWNLOAD_ANALOGS = 1; -- Признак необходимости выгрузки аналогов товаров (1 -выгружать аналоги ,0 - не выгружать)/##CHR(13)##//##CHR(10)##/ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ = 0; -- Признак необходимости перезаписи имеющихся файлов с изображениями товаров в папке IMG/##CHR(13)##//##CHR(10)##/ -- (0- не перезаписывать,1 - перезаписывать)/##CHR(13)##//##CHR(10)##/ВЕСТИ_ЖУРНАЛ=1; -- Признак необходимости ведения журнала копирования изображений в ПЧ/##CHR(13)##//##CHR(10)##/ -- (0- не вести журнал,1 - вести журнал )./##CHR(13)##//##CHR(10)##/--Журнал хранится в файле journ_copy_img.txt в папке,указанной в карточке торгового оборудования для ПЧ/##CHR(13)##//##CHR(10)##/-- (в той папек,где хранится файл выгрузки данных в ПЧ)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( EMPTY( exchangeservice_out ) AND NOT EMPTY( path_flag_out ) )/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT * FROM " + ПАПКИ + " ORDER BY parent", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";;;;;;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь и имя файла с картинкой /##CHR(13)##//##CHR(10)##/mImage_path = LOWER(ALLTRIM( image_path ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/-- Формируем имя файла, в который будем записывать картинку/##CHR(13)##//##CHR(10)##/ИмяФайлаКартинки= LEFT( path_out, RAT( path_out, ''\'' ) ) + "IMG\" + mCode + ".jpg";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///флажок необходимости выполнения команды /##CHR(13)##//##CHR(10)##/ТипКартинки = LOWER( ЗАПРОС( "SELECT fileext FROM sprres_image WHERE code= ''" + nn + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипКартинки == "jpg" AND ( !ФАЙЛ( ИмяФайлаКартинки ) OR ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ ) ) /##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ Картинка = ЗАПРОС("SELECT image_ FROM sprres_image WHERE code= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ Файл = ФайлСоздать( ИмяФайлаКартинки );/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( Файл, Картинка );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mImage_path = mCode + ".jpg";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если указано имя внешнего файла, то копируем его в каталог/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( mImage_path ) AND RIGHT( mImage_path, 4 ) == ".jpg" AND ФАЙЛ( mImage_path ) AND ( !ФАЙЛ( ИмяФайлаКартинки ) OR ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( mImage_path );/##CHR(13)##//##CHR(10)##/ Картинка = ФайлПрочитать( Файл, "B" );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ Файл = ФайлСоздать( ИмяФайлаКартинки );/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( Файл, Картинка );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mImage_path = mCode + ".jpg";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ mImage_path = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mNote = STRTRAN( STRTRAN( ALLTRIM( note ), CHR( 13 ), " " ), CHR( 10 ), " " );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + mName + ";" + mCname + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + STR( kolp, 10, 3 ) + ";" + aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'' WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (DOWNLOAD_ANALOGS==1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Удаление аналогов из ККМ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWAREANALOGS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( saldotype == 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWAREANALOGSBYCODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгрузка аналогов /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "select s.maincode as code1,b.maincode as code2 from sprnn s inner join /##CHR(13)##//##CHR(10)##/ sprnnlinks_alter a on s.nn=a.nn inner join sprnn b on a.nn_alter=b.nn inner join /##CHR(13)##//##CHR(10)##/ (SELECT code FROM " + ТОВАРЫ+") t on t.code=s.maincode where a.nn_r ='''' /##CHR(13)##//##CHR(10)##/ and b.maincode in (SELECT code FROM " + ТОВАРЫ+")", "Аналоги"); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Выбратьконтекст("Аналоги");/##CHR(13)##//##CHR(10)##/IF (reccount("Аналоги")==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Аналоги" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/--------------------------------------/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDWAREANALOGS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/--code1 - код товара (берется из maincode)/##CHR(13)##//##CHR(10)##/--code2 - код аналога (берется из maincode)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/prev=''''; -- предыдущее значения кода товара/##CHR(13)##//##CHR(10)##/i=0; -- код текущего аналога для данного товара(по каждому товару нумерация аналогов начинается с 1)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Аналоги" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ if (code1<>prev) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ prev=code1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i+=1;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла,alltrim(str(i))+";"+code1+";"+code2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Аналоги" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ } -- DOWNLOAD_ANALOGS==1/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'30.03.2015 16:33:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Передача данных в ПЧ АТОЛ','ККМ',0.00000000,'',0.00000000,14.00000000,0,'',0.00000000,'','',0,'ED734237-2772-4FF0-928C-08857A6F646D',0,1,0,'07.09.2016 16:07:52') #begin #description Профиль Штрих ФР с секцией (отделом) из группы ресурсов #name Профиль Штрих ФР с секцией (отделом) из группы ресурсов #code 0000000035 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##/ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##/PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##/ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/driverKKM.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ); // Секция/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/driverKKM.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ); // Секция/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:26:04') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Штрих ФР с секцией (отделом) из группы ресурсов','ФР',0.00000000,'',0.00000000,46.00000000,0,'',0.00000000,'','',0,'DAB51C4E-9E06-48B5-9C01-784C8D4E086E',0,1,0,'06.11.2016 23:26:04') #begin #description Весы с ПЭ DIGI SM С ВЫВОДОМ СОСТАВА #name Весы с ПЭ DIGI SM С ВЫВОДОМ СОСТАВА #code 0000000036 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/ДопКодОборудования = ЗАПРОС( "SELECT ex_code FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/ИмяФайлаВесов = "c:\SCALEUPLOAD\ExportDir\" + ЕСЛИ( !ПУСТО( ДопКодОборудования ), ДопКодОборудования, КодОборудования );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаВесов );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы с ПЭ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаВесов ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'13.07.2016 15:07:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/PREF = "A"; //Заголовок "A" – признак товарной позиции/##CHR(13)##//##CHR(10)##/SPLU = ПЛУ;//Номер PLU, 1…999997/##CHR(13)##//##CHR(10)##/SCODE = ALLTRIM(КОД);//Данные ШК /##CHR(13)##//##CHR(10)##/SCODE = PADL(SCODE,5);/##CHR(13)##//##CHR(10)##/SCODE = STRTRAN(SCODE," ","0");/##CHR(13)##//##CHR(10)##/SCODE = "2"+STR(waretype)+SCODE;/##CHR(13)##//##CHR(10)##/SPrice = ALLTRIM( STR( ЕСЛИ( ЦЕНА < 0.01, 1, ЦЕНА ), 8, 2 ) ); // Весы не загружают товар с нулевой ценой/##CHR(13)##//##CHR(10)##/SWareType = STR(waretype);//Тип товара (0 - весовой, 1 - штучный)/##CHR(13)##//##CHR(10)##/BASEPRICE = "0";//Ценовая база (0 - 1 Кг, 1 – 100 г)/##CHR(13)##//##CHR(10)##/SBESTBEFORE = STR(storeperiod);//Срок годности, дни/##CHR(13)##//##CHR(10)##/SName = LEFT( ALLTRIM( name ), 80 );//Наименование товара/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = PREF + ";" + SPLU + ";" + SCODE + ";" + SPrice + ";" + SWareType + ";" + /##CHR(13)##//##CHR(10)##/ BASEPRICE + ";" +SBESTBEFORE + ";" + SName; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования не указано выводить комментарии на этикетку, то и не выводим/##CHR(13)##//##CHR(10)##/IF ( !ЗАПРОС( "SELECT f_messages FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Определяем состав /##CHR(13)##//##CHR(10)##/// Выводим примечание /##CHR(13)##//##CHR(10)##/Строка = "I;" + SPLU; /##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/mNote = STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/// Если примечания нет, то выводим состав из первой калькуляции/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprnn.name /##CHR(13)##//##CHR(10)##/ FROM spec056 spec /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.nn= spec.nn /##CHR(13)##//##CHR(10)##/ WHERE spec.ic = dbo.fn_getcalc( ''" + @Товар + "'', '''', ''001'', 1 )", "Состав" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "Состав" ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mNote += ЕСЛИ( !ПУСТО( mNote ), CHR( 13 ), "" ) + Состав.name;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "Состав" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "Состав" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/messageNum = 1;/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= 15 AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ else/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка += ";" + msgLine;/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'13.07.2016 15:07:36') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'13.07.2016 15:07:36') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = true',0,0,0,0,'13.07.2016 15:07:36') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'//Окончание работы с ВЕСАМИ С ПЭ/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );',0,0,0,0,'13.07.2016 15:07:36') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ DIGI SM С ВЫВОДОМ СОСТАВА','ВЕСЫ',0.00000000,'',0.00000000,7.00000000,0,'',0.00000000,'','',0,'5C05D7B1-831B-4934-96ED-9A16ADE005EC',0,1,0,'13.07.2016 15:07:35') #begin #description ТСД (драйвер Атол) v.2 #name ТСД (драйвер Атол) v.2 #code 0000000037 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1.00000000,'//Инициализация ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC НОМЕРУСТРОЙСТВАТСД, ОШИБКАРАБОТЫСТСД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАТСД = НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = "";/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',2.00000000,'//Очистка ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.currentDeviceNumber = НОМЕРУСТРОЙСТВАТСД; // Номер устройства/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/ driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/ driverTSD.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',3.00000000,'//Инициализация выгрузки в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.currentDeviceNumber = НОМЕРУСТРОЙСТВАТСД; // Номер устройства/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/ driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/ driverTSD.BeginAdd( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',4.00000000,'//Установка значения поля в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = НомерПоля;/##CHR(13)##//##CHR(10)##/driverTSD.ReportField = ALLTRIM( ЗначениеПоля );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',5.00000000,'//Добавление записи в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',6.00000000,'//Окончание выгрузки в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.AddMode = 0;/##CHR(13)##//##CHR(10)##/driverTSD.EndAdd( );/##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Закрываем усройство/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##///------ Указываем драйверу номер формы из которой будем загружать данные/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.currentDeviceNumber = НОМЕРУСТРОЙСТВАТСД; // Номер устройства/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/ driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/ driverTSD.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverTSD.BeginReport( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##///---- Читаем очередную запись из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.GetRecord()/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИНДЕКСПОЛЯ;/##CHR(13)##//##CHR(10)##/ЗначениеПоля = ALLTRIM( driverTSD.ReportField );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЗначениеПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.EndReport( );/##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Закрываем усройство/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',11.00000000,'//Текст ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ОШИБКАРАБОТЫСТСД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',12.00000000,'//Признак наличия ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоПолей = driverTSD.ReportFieldCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоПолей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоЗаписей = driverTSD.ReportRecordCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоЗаписей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ >= driverTSD.ReportFieldCount ) RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИндексПоля;/##CHR(13)##//##CHR(10)##/ИмяПоля = driverTSD.ReportFieldName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИмяПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/driverTSD.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/driverTSD.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverTSD.currentDeviceName;/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverTSD.deviceCount;/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',21.00000000,'//Окончание работы с ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD = false;',0,0,0,0,'17.06.2016 11:42:46') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','ТСД (драйвер Атол) v.2','ТСД',0.00000000,'',0.00000000,4106.00000000,0,'',0.00000000,'','',0,'87D05153-05C3-4E9F-A018-BBFD1856D98F',0,1,0,'17.06.2016 11:42:46') #begin #description Обмен данными с Фронтол. WIN32 V2 (выгрузка акций на товары из переоценки ТМЦ) #name Обмен данными с Фронтол. WIN32 V2 (выгрузка акций на товары из переоценки ТМЦ) #code 0000000039 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) +IIF(IN_PARAM_NAME_WEIGHT == 0, "", /##CHR(13)##//##CHR(10)##/ " "+ ALLTRIM(QUERY("SELECT CASE WHEN d_litr <> 0 THEN str(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN str(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END FROM sprnn WHERE maincode = ''" + code + "''" ) ) );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КОДДОКУМЕНТА == "005" AND ЗАПРОС( "SELECT f_action FROM spr005 WHERE identity_column= " + ИДДОКУМЕНТА + " AND endaction > GETDATE( )" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPRICES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprnn.maincode, reg008.cena, reg008.cena_, reg008.date, reg008.endaction /##CHR(13)##//##CHR(10)##/ FROM spec005 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN reg008 reg008 ON spec.nn = reg008.nn AND spec.ic = reg008.ic AND reg008.account_=''001''/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокАкционныхТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокАкционныхТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкционныхТоваров.maincode + ";;;" + STR( СписокАкционныхТоваров.cena ) + ";" + DTOC( СписокАкционныхТоваров.date ) + ";" + TTOC( СписокАкционныхТоваров.date, 8 ) + ";" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкционныхТоваров.maincode + ";;;" + STR( СписокАкционныхТоваров.cena_ ) + ";" + DTOC( СписокАкционныхТоваров.endaction ) + ";" + TTOC( СписокАкционныхТоваров.endaction, 8 ) + ";" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкционныхТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокАкционныхТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:26') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (выгрузка акций на товары из переоценки ТМЦ)','ККМ',0.00000000,'',0.00000000,50.00000000,0,'',0.00000000,'','',0,'730D5F17-6913-40AA-80D9-7209F0CCC051',0,1,0,'26.12.2018 15:37:26') #begin #description Профиль ФР Атол v.2 #name Профиль ФР Атол v.2 #code 0000000040 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus( ); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument( );/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.Session ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( ); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "НДС" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ ИТОГОНДС[ КомандыЧека.kodn ]+= ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "ОТМЕНА НДС" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.ResetTax( );/##CHR(13)##//##CHR(10)##/ //ИТОГОНДС[ КомандыЧека.kodn ]+= СУММАНДС;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если был начислен НДС, то выводим его/##CHR(13)##//##CHR(10)##/ КодНалога = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( КодНалога <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИТОГОНДС[ КодНалога ] != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = 0;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ИТОГОНДС[ КодНалога ];/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КодНалога;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КодНалога++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, /##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ЕСЛИ( ТипЧека == 1, "2", "1" ) + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Артикул: " + STDF( Артикул ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ОТМЕНА НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ // Частичная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.PartialCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.2','ФР',0.00000000,'',0.00000000,6.00000000,0,'',0.00000000,'','',0,'E4EEAD8D-AD2E-49F2-A413-071F4AF2A804',0,1,0,'08.11.2016 10:21:21') #begin #description ТСД (драйвер Атол) #name ТСД (драйвер Атол) #code 0000000041 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1.00000000,'//Инициализация ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverTSD;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE( "driverTSD" ) <> "O" )/##CHR(13)##//##CHR(10)##/ driverTSD = СОЗДАТЬОБЪЕКТ( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE( "driverTSD" ) <> "O" )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.currentDeviceNumber = НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',2.00000000,'//Очистка ТСД/##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',3.00000000,'//Инициализация выгрузки в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.BeginAdd( )/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',4.00000000,'//Установка значения поля в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = НомерПоля;/##CHR(13)##//##CHR(10)##/driverTSD.ReportField = ALLTRIM( ЗначениеПоля );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',5.00000000,'//Добавление записи в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',6.00000000,'//Окончание выгрузки в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.AddMode = 0;/##CHR(13)##//##CHR(10)##/driverTSD.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##///------ Указываем драйверу номер формы из которой будем загружать данные/##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.BeginReport( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##///---- Читаем очередную запись из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.GetRecord( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИНДЕКСПОЛЯ;/##CHR(13)##//##CHR(10)##/ЗначениеПоля = ALLTRIM( driverTSD.ReportField );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN ЗначениеПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.EndReport( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',11.00000000,'//Текст ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',12.00000000,'//Признак наличия ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN driverTSD.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоПолей = driverTSD.ReportFieldCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN КоличествоПолей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоЗаписей = driverTSD.ReportRecordCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN КоличествоЗаписей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ >= driverTSD.ReportFieldCount ) RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИндексПоля;/##CHR(13)##//##CHR(10)##/ИмяПоля = driverTSD.ReportFieldName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN ИмяПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverTSD;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если объект драйвера еще не был создан, то создаем/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverTSD" ) != "O" ) /##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverTSD;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если объект драйвера еще не был создан, то создаем/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverTSD" ) != "O" ) /##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverTSD.currentDeviceName;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverTSD;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если объект драйвера еще не был создан, то создаем/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverTSD" ) != "O" ) /##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX45", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverTSD.deviceCount;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',21.00000000,'//Окончание работы с ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Деактивируем устройство/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverTSD = false;',0,0,0,0,'17.06.2016 11:41:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','ТСД (драйвер Атол)','ТСД',0.00000000,'',0.00000000,4106.00000000,0,'',0.00000000,'','',0,'A094B220-6759-438C-BB74-B106900FA39A',0,1,0,'17.06.2016 11:41:05') #begin #description Профиль ФР Атол v.2 FPrint 5200 #name Профиль ФР Атол v.2 FPrint 5200 #code 0000000044 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Частичная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.PartialCut();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "НДС" AND _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ ИТОГОНДС[ КомандыЧека.kodn ]+= ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "ОТМЕНА НДС" AND _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.ResetTax( );/##CHR(13)##//##CHR(10)##/ //ИТОГОНДС[ КомандыЧека.kodn ]+= СУММАНДС;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если был начислен НДС, то выводим его/##CHR(13)##//##CHR(10)##/ КодНалога = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( КодНалога <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИТОГОНДС[ КодНалога ] != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = 0;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ИТОГОНДС[ КодНалога ];/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КодНалога;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КодНалога++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, /##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ЕСЛИ( ТипЧека == 1, "2", "1" ) + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ОТМЕНА НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus( ); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.Session ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( ); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.11.2016 10:21:30') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.2 FPrint 5200','ФР',0.00000000,'',0.00000000,55.00000000,0,'',0.00000000,'','',0,'487B5CF5-E91B-4E45-862B-BD07B66621F6',0,1,0,'08.11.2016 10:21:30') #begin #description Весы с ПЭ (драйвер АТОЛ) выгрузка всех товаров #name Весы с ПЭ (драйвер АТОЛ) выгрузка всех товаров #code 0000000045 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ОШИБКАДРАЙВЕРА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*------- Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN _ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',49.00000000,'/##CHR(13)##//##CHR(10)##///Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыводитьСообщения = ЗАПРОС( "SELECT f_messages FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ПРИЗНАКОЧИСТКИВЕСОВ = true;/##CHR(13)##//##CHR(10)##/КодГруппыВесов = ЗАПРОС( "SELECT MIN( code ) AS code FROM sprnnweights WHERE eq_code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/КатегорияЦены = ЗАПРОС( "SELECT clev FROM sprskl WHERE code = ( SELECT sklad FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'')" );/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE, ОШИБКАДРАЙВЕРА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverSCALE") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ driverSCALE.currentDeviceNumber= НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverSCALE.ResultCode != 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( товары )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) driverSCALE.Clear( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/IF ( driverSCALE.ResultCode != 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT w.code, w.nn, s.maincode, s.code AS a_code, s.name, w.plu, s.store_period AS storeperiod, /##CHR(13)##//##CHR(10)##/ CASE WHEN ( SELECT f_weight FROM spredn WHERE code= s.ed ) = 1 THEN 0 ELSE 1 END AS waretype, s.note,/##CHR(13)##//##CHR(10)##/ dbo.fn_calcclev_cena( s.nn, '''', ''" + КатегорияЦены + "'', ''001'') AS cena/##CHR(13)##//##CHR(10)##/ FROM sprnnweights w /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn s /##CHR(13)##//##CHR(10)##/ ON w.nn = s.nn /##CHR(13)##//##CHR(10)##/ WHERE w.nn <> '''' AND w.code = ''" + КодГруппыВесов + "''/##CHR(13)##//##CHR(10)##/ ORDER BY w.code, s.name ", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( СписокТоваров.plu ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/ driverSCALE.PLU = СписокТоваров.plu;/##CHR(13)##//##CHR(10)##/ driverSCALE.ICode = VAL( СписокТоваров.maincode );/##CHR(13)##//##CHR(10)##/ driverSCALE.Price = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ driverSCALE.Name = LEFT( ALLTRIM( СписокТоваров.name ), 28 );/##CHR(13)##//##CHR(10)##/ driverSCALE.Name2 = SUBSTR( ALLTRIM( СписокТоваров.name ), 29, 28 );/##CHR(13)##//##CHR(10)##/ driverSCALE.GCode = 0;/##CHR(13)##//##CHR(10)##/ driverSCALE.MsgNo = VAL( СписокТоваров.plu );/##CHR(13)##//##CHR(10)##/ driverSCALE.Tare = 0;/##CHR(13)##//##CHR(10)##/ driverSCALE.Life = СписокТоваров.storeperiod;/##CHR(13)##//##CHR(10)##/ driverSCALE.WareType= СписокТоваров.wareType;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Передаем запись драйверу/##CHR(13)##//##CHR(10)##/ driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь выгружаем сообщения/##CHR(13)##//##CHR(10)##/IF ( ВыводитьСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverSCALE.TableType = 1;/##CHR(13)##//##CHR(10)##/ driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/ driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( СписокТоваров.plu ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/ driverSCALE.MsgNo = VAL( СписокТоваров.plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/ mNote = STRTRAN( СписокТоваров.note, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ messageNum = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( messageNum <= 12 AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вычислить( "driverSCALE.MsgLine" + ALLTRIM( STR( messageNum ) ) + " = msgLine;" );/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Передаем запись драйверу/##CHR(13)##//##CHR(10)##/ driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/ driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАДРАЙВЕРА = driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/driverSCALE.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverSCALE.currentDeviceName;/##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverSCALE.deviceCount;/##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'10.03.2015 17:15:29') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер АТОЛ) выгрузка всех товаров','ВЕСЫ',0.00000000,'',0.00000000,56.00000000,0,'',0.00000000,'','',0,'66E5F753-1332-4E53-8BC9-6F4BD7E63BF4',0,1,0,'10.03.2015 17:15:29') #begin #description Обмен данными с Фронтол. WIN32 V2 (дисконтные карты из клиентов владельцев карт) #name Обмен данными с Фронтол. WIN32 V2 (дисконтные карты из клиентов владельцев карт) #code 0000000020 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) +IIF(IN_PARAM_NAME_WEIGHT == 0, "", /##CHR(13)##//##CHR(10)##/ " "+ ALLTRIM(QUERY("SELECT CASE WHEN d_litr <> 0 THEN str(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN str(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END FROM sprnn WHERE maincode = ''" + code + "''" ) ) );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM sprmclient cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КЛИЕНТЫ + " tempcln ON cln.code = tempcln.code/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON cln.card = crd.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:16') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (дисконтные карты из клиентов владельцев карт)','ККМ',0.00000000,'',0.00000000,28.00000000,0,'',0.00000000,'','',0,'E7BDC2FF-1416-44BE-8F30-8A133300E0E1',0,1,0,'26.12.2018 15:37:16') #begin #description Обмен данными с Фронтол. WIN32 V2 (для автоматической загрузки с альтернативными параметрами) #name Обмен данными с Фронтол. WIN32 V2 (для автоматической загрузки с альтернативными параметрами) #code 0000000048 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT dbo.fn_fullnnname( nn ) AS name, nnvid, d_litr, a_proc, ed/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) <> ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:37:07') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (для автоматической загрузки с альтернативными параметрами)','ККМ',0.00000000,'',0.00000000,67.00000000,0,'',0.00000000,'','',0,'2B2A9C3B-13F8-4D4A-81AC-CFA559562FD2',0,1,0,'26.12.2018 15:37:07') #begin #description Сканер ШК преобразование шаблона #name Сканер ШК преобразование шаблона #code 0000000049 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',68.00000000,'//Проверка прочитанного штрихового кода СКАНЕРОМ ШК./##CHR(13)##//##CHR(10)##/IF ( LEFT( ШТРИХКОД, 2 ) == "21" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/// Сообщение( "26" + RIGHT( "000000" + ЗАПРОС( "SELECT maincode FROM sprres WHERE a_code = ''" + STR( VAL( SUBSTR( ШТРИХКОД, 3, 5 ) ) )+ "''" ), 6 ) + /##CHR(13)##//##CHR(10)##/// STR( VAL( SUBSTR( ШТРИХКОД, 8, 5 ) ), 4, 0, true, false ) + "0" );/##CHR(13)##//##CHR(10)##/ RETURN "26" + RIGHT( "000000" + ЗАПРОС( "SELECT maincode FROM sprres WHERE a_code = ''" + STR( VAL( SUBSTR( ШТРИХКОД, 3, 5 ) ) )+ "''" ), 6 ) + /##CHR(13)##//##CHR(10)##/ STR( VAL( SUBSTR( ШТРИХКОД, 8, 5 ) ), 4, 0, true, false ) + "0";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ШТРИХКОД;',0,0,1,0,'11.03.2015 12:50:40') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК преобразование шаблона','СКАНЕР',0.00000000,'',0.00000000,4333.00000000,0,'',0.00000000,'','',0,'258684F6-D453-412D-91EA-817B0B2341A3',0,1,0,'11.03.2015 12:50:40') #begin #description Весы с ПЭ (МАССА-К ВПМ) #name Весы с ПЭ (МАССА-К ВПМ) #code 0000000050 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ФайлМассаК, МассаКИмяФайла;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то сформируем файл с командой удаления всех товаров/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ( "ScalesCommunications.exe", "ERASE 1 0", "", "open", 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКИмяФайла = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/// Создаем файл для записи в него выгружаемых товаров/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/Строка = "PLU;TYPE;LABEL_NUMBER;BARCODE_NUMBER;BARCODE_PREFIX;PRICE;TARE;CODE;BEST_BEFORE;SHELF_LIFE;CERTIFICATE;GROUP;CENTERING;NAME;CONTENT;INFO_TYPE;INFO";/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Убираем из наименования и примечания символы, которые не понимает программа МАССА-К/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ= ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( НАИМЕНОВАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ПРИМЕЧАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ DTOC( ДАТА( ) + СРОКГОДНОСТИ ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем строку в файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка ) ;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##/ВЫПОЛНИТЬ( "ScalesCommunications.exe", "WRITE 101 " + МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN "МАССА-К ВМП";',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'25.05.2016 12:48:11') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (МАССА-К ВПМ)','ВЕСЫ',0.00000000,'',0.00000000,70.00000000,0,'',0.00000000,'','',0,'6C3ED08B-F18C-46B1-BD3C-0E363A916B0A',0,1,0,'25.05.2016 12:48:11') #begin #description Обмен данными с Фронтол. WIN32 V2 (ODBC) #name Обмен данными с Фронтол. WIN32 V2 (ODBC) #code 0000000042 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС = false;/##CHR(13)##//##CHR(10)##/// Выгружать признак алкоголоя или нет./##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬПРИЗНАКАЛКОГОЛЯ = false;/##CHR(13)##//##CHR(10)##/// Выгружать ли модификаторы/##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬМОДИФИКАТОРЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',202.00000000,'// Проверка возможности выгрузки данных в ККМ./##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕФРОНТОЛ;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Фронтол." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕФРОНТОЛ= ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##///ДОБАВИТЬСОЕДИНЕНИЕ( ''Driver=Firebird/InterBase(r) driver;Dbname=D:\ATOL\DB\MAIN.GDB;CHARSET=NONE;PWD=masterkey;UID=SYSDBA;'' );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе Фронтол - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕФРОНТОЛ < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ( -1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано очищать список товаров - чистим все необходимые таблицы/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Очистка справочника товаров в ККМ." );/##CHR(13)##//##CHR(10)##/ IF ( !ЗАПРОС( "DELETE FROM sprt", "", СОЕДИНЕНИЕФРОНТОЛ ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM barcode", "", СОЕДИНЕНИЕФРОНТОЛ ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM analog", "", СОЕДИНЕНИЕФРОНТОЛ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка очистки списка товаров в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/// Выгрузка папок через ODBC соединение/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокПапок" ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодПапки = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ КодРПапки = ALLTRIM( STR( ABS( parent ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ ИДПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + КодПапки, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДРПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + КодРПапки, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ УровеньИерархии = ЗАПРОС( "SELECT hierlevel FROM sprt WHERE code= " + КодРПапки, "hierlevel", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если такой папки нет, то добавляем. Удалять папки нельзя, т.к. все ссылки у вложенных товаров потеряются/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИДПапки == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprt WHERE code= " + КодПапки, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДПапки = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE >= 0 AND ИДПапки > 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprt (id, code, mark, name, parentid, text, isware, hierlevel, flags,/##CHR(13)##//##CHR(10)##/ scalelpdevid, scalelpwarecode, rewardtype, rewardval ) VALUES/##CHR(13)##//##CHR(10)##/ (" + ИДПапки + "," + КодПапки + " ,'''', ''" + STDF( СписокПапок.name, 100 ) + "'', " + ИДРПапки + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( СписокПапок.name, 100 )+"'', 0, " + STR( УровеньИерархии + 1 ) + ", 0, 0, 0, 0, 0)", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprt SET /##CHR(13)##//##CHR(10)##/ name = ''" + STDF( СписокПапок.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ parentid = " + ИДРПапки + ",/##CHR(13)##//##CHR(10)##/ text = ''" + STDF( СписокПапок.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ isware = 0,/##CHR(13)##//##CHR(10)##/ hierlevel = " + STR( УровеньИерархии + 1 ) + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + ИДПапки, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка записи папки в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед добавлением необходимо удалить схемы разрезов, которые загружаем/##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка записи схем разрезов в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspschm", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspect", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspvalue", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если указано, что необходимо выгружать разрезы как разрезы, а не только отдельными карточками,/##CHR(13)##//##CHR(10)##/// то выгружаем схемы разрезов и сами разрезы/##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspschm ( id, code, name, text ) VALUES /##CHR(13)##//##CHR(10)##/ ( gen_id(gid,1), " + STR( VAL( СхемыРазрезов.schemecode ) ) + ", ''" + STDF( СхемыРазрезов.name, 100 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( СхемыРазрезов.name, 100 ) + "'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ // Проходим по созданным схемам и, для каждой схемы, выгружаем связанные разрезы/##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code = " + СхемыРазрезов.schemecode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''/##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspect (id, code, aspectschemeid, name, text) VALUES ( /##CHR(13)##//##CHR(10)##/ " + НовыйИД + ", " + STR( СоставСхемы.f_num ) + ", " + STR( ИДСхемы ) + ", /##CHR(13)##//##CHR(10)##/ ''" + STDF( СоставСхемы.name, 100 ) + "'',''" + STDF( СоставСхемы.name, 100 )+"'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( НовыйИД ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code = " + СоставСхемы.schemecode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ЗначенияРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspvalue (id, code, name, text, aspectid, aspectschemeid) VALUES( /##CHR(13)##//##CHR(10)##/ " + НовыйИД + ", " + ЗначенияРазрезов.valuecode + ", /##CHR(13)##//##CHR(10)##/ ''" + STDF( ЗначенияРазрезов.name, 100 ) + "'', ''" + STDF( ЗначенияРазрезов.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( СоставСхемы.id ) + ", " + STR( ИДСхемы ) + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspvalue (id, code, name, text, aspectid, aspectschemeid) /##CHR(13)##//##CHR(10)##/ VALUES( " + НовыйИД + ", 999999999, '''', '''', " + STR( СоставСхемы.id ) + ", " + STR( ИДСхемы ) + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/} // IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка товара в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОбъемВес = "";/##CHR(13)##//##CHR(10)##/Алкоголь = false;/##CHR(13)##//##CHR(10)##/IF ( ДобавлятьКНаименованиюОбъемВес OR ВыгружатьПризнакАлкоголя )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volwgt,/##CHR(13)##//##CHR(10)##/ CASE WHEN nnvid <> '''' AND a_proc <> 0 THEN 1 ELSE 0 END AS alco/##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ ОбъемВес = " " + СЖАТЬПРОБЕЛЫ( ТоварИнфо.volwgt );/##CHR(13)##//##CHR(10)##/ Алкоголь = ТоварИнфо.alco > 0;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = code;/##CHR(13)##//##CHR(10)##/mBarcode = barcode;/##CHR(13)##//##CHR(10)##/mName = name + ОбъемВес;/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "null" );/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, "''" + ALLTRIM( DTOC( store_period + DATE( ) ) ) + "''", "null" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = STDF( article, 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDF( note, 1024 );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/mFlags = ALLTRIM( STR( ЕСЛИ( fractqty OR waretype == 0, 1, 0 ) + ЕСЛИ( enterqty, 0, 16 ) + 110 + ЕСЛИ( enterqty, 128, 0 ) + ЕСЛИ( Алкоголь, 16384, 0 ) ) );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "null", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ЕСЛИ( kkm_weight AND !EMPTY( plu ), ALLTRIM( plu ), "null" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// При выгрузке модификаоров определяем признак визуального выбора/##CHR(13)##//##CHR(10)##/ВизуальныйВыбор = 0;/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬМОДИФИКАТОРЫ )/##CHR(13)##//##CHR(10)##/ ВизуальныйВыбор = ЗАПРОС("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДТовара = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( code ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если товар уже есть в базе данных и не надо сохранять остатки, то/##CHR(13)##//##CHR(10)##/// удаляем текущий товар и связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/IF ( ИДТовара > 0 AND saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM analog WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM barcode WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprt WHERE code= " + STR( VAL( code ) ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если разрез/##CHR(13)##//##CHR(10)##/ИДСхемы = 0;/##CHR(13)##//##CHR(10)##/mAspectType = STR( aspectType );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ищем ID схемы разрезов/##CHR(13)##//##CHR(10)##/IF ( f_hchild AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДСхемы = STR( ЗАПРОС( "SELECT id FROM aspschm WHERE code= " + VAL( nngroup ), "id", СОЕДИНЕНИЕФРОНТОЛ ) );/##CHR(13)##//##CHR(10)##/ mAspectType = ЕСЛИ( saldotype > 0, "2", "1" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Определяем ID устройства весов. По утверждению АТОЛ всегда должен быть 0/##CHR(13)##//##CHR(10)##/ИДВесов = 0;/##CHR(13)##//##CHR(10)##/// Код налоговой группы во Фронтоле/##CHR(13)##//##CHR(10)##/ИДНалогов = 0;/##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/ ИДНалогов = ЗАПРОС( "SELECT id FROM taxgroup WHERE code =" + VAL( mKodn ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/// Коды групп печати/##CHR(13)##//##CHR(10)##/ИДГруппыЧека = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintChek ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыКопии = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintCopy ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыСчета = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintInvoice ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыМарки = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintMark ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Признак необходимости грузить весы через фронтол/##CHR(13)##//##CHR(10)##/mWeightFlag = ЕСЛИ( kkm_weight, "1", "0" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ИДТовара == 0 OR ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДТовара == 0 ) /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprt (id, aspectschemeid, aspecttype, code, mark, name, parentid, text, isware, flags, /##CHR(13)##//##CHR(10)##/ scalelpdevid, scalelpwarecode, scalelploaded, taxgroupid, minprice, /##CHR(13)##//##CHR(10)##/ maxdiscount, description, rewardtype, rewardval, life, ecrdepartment, printgroupclose, /##CHR(13)##//##CHR(10)##/ printgroupcopy, printgroupprecheque, printgroupstamp, VisualSelect ) VALUES/##CHR(13)##//##CHR(10)##/ (" + ИДТовара + ", " + ИДСхемы + ", " + mAspectType + ", /##CHR(13)##//##CHR(10)##/ " + mCode + ", ''" + STDF( mArticle ) + "'', ''" + STDF( mName ) + "'', " + ИДПапки + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( mCname ) + "'', 1, " + mFlags + ", " + ИДВесов + ",/##CHR(13)##//##CHR(10)##/ " + mPLU + ", " + mWeightFlag + ", " + ИДНалогов + ", /##CHR(13)##//##CHR(10)##/ " + mMin_cena + ", " + mActionPriz + ", ''" + STDF( mNote ) + "'', 0, 0, " + mStore_period + ",/##CHR(13)##//##CHR(10)##/ " + mKkm_section + ", " + ИДГруппыЧека + ", " + ИДГруппыКопии + ", " + ИДГруппыСчета + ", /##CHR(13)##//##CHR(10)##/ " + ИДГруппыМарки + ", " + ВизуальныйВыбор + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprt SET/##CHR(13)##//##CHR(10)##/ aspectschemeid = " + ИДСхемы + ",/##CHR(13)##//##CHR(10)##/ aspecttype = " + mAspectType + ",/##CHR(13)##//##CHR(10)##/ code = " + mCode + ",/##CHR(13)##//##CHR(10)##/ mark = ''" + STDF( mArticle ) + "'',/##CHR(13)##//##CHR(10)##/ name = ''" + STDF( mName ) + "'',/##CHR(13)##//##CHR(10)##/ parentid = " + ИДПапки + ",/##CHR(13)##//##CHR(10)##/ text = ''" + STDF( mCname ) + "'',/##CHR(13)##//##CHR(10)##/ isware = 1,/##CHR(13)##//##CHR(10)##/ flags = " + mFlags + ",/##CHR(13)##//##CHR(10)##/ scalelpdevid = 0,/##CHR(13)##//##CHR(10)##/ scalelpwarecode = " + mPLU + ",/##CHR(13)##//##CHR(10)##/ scalelploaded = " + mWeightFlag + ",/##CHR(13)##//##CHR(10)##/ rewardtype = 0,/##CHR(13)##//##CHR(10)##/ rewardval = 0,/##CHR(13)##//##CHR(10)##/ taxgroupid = " + ИДНалогов + ",/##CHR(13)##//##CHR(10)##/ minprice = " + mMin_cena + ",/##CHR(13)##//##CHR(10)##/ description = ''" + STDF( mNote ) + "'',/##CHR(13)##//##CHR(10)##/ life = " + mStore_period + ",/##CHR(13)##//##CHR(10)##/ ecrdepartment = " + mKkm_section + ",/##CHR(13)##//##CHR(10)##/ maxdiscount = " + mActionPriz + ",/##CHR(13)##//##CHR(10)##/ printgroupclose = " + ИДГруппыЧека + ",/##CHR(13)##//##CHR(10)##/ printgroupcopy = " + ИДГруппыКопии + ",/##CHR(13)##//##CHR(10)##/ printgroupstamp = " + ИДГруппыМарки + ",/##CHR(13)##//##CHR(10)##/ printgroupprecheque= " + ИДГруппыСчета + ",/##CHR(13)##//##CHR(10)##/ VisualSelect = " + ВизуальныйВыбор + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ //Сообщение( "Выгрузка товара " + ИДТовара );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если необходимо добавить остаток товара - добавляем/##CHR(13)##//##CHR(10)##/ИДОстатка = ЗАПРОС( "SELECT id FROM remain WHERE wareid= " + ИДТовара , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( ИДОстатка == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДОстатка = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДОстатка == 0 ) /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remain ( id, wareid ) VALUES (" + ИДОстатка + ", " + ИДТовара + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( saldotype > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДНачальногоОстатка = 0;/##CHR(13)##//##CHR(10)##/ // Если строка с остатком уже есть, то достаем ИД изменения остатка (продажи)/##CHR(13)##//##CHR(10)##/ IF ( saldotype == 1 AND !ПУСТО( ИДОстатка ) )/##CHR(13)##//##CHR(10)##/ ИДНачальногоОстатка = ЗАПРОС( "SELECT id FROM remaind WHERE remainid= " + ИДОстатка + " AND dtype= 1", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Удаляем старый остаток вместе с продажами и добавляем новый/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remain WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remaind WHERE remainid = " + ИДОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Либо добавляем, либо изменяем начальное количество/##CHR(13)##//##CHR(10)##/ IF ( ИДНачальногоОстатка != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remaind WHERE id= " + ИДНачальногоОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем изменение количества/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remaind ( id, remainid, delta, dtype ) VALUES ( gen_id(gid,1)," + ИДОстатка + ", " + STR( -VAL( mTmcSaldo ), 10, 3 ) + ", 1)", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Теперь добавляем цену/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM pricedata WHERE remainid= " + ИДОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO pricedata ( id, remainid, price, actdatetime ) VALUES ( gen_id(gid,1)," + ИДОстатка + ", " + mCena + ", ''30.12.1899'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем разрезы товара/##CHR(13)##//##CHR(10)##/value1_id = 0;/##CHR(13)##//##CHR(10)##/value2_id = 0;/##CHR(13)##//##CHR(10)##/value3_id = 0;/##CHR(13)##//##CHR(10)##/value4_id = 0;/##CHR(13)##//##CHR(10)##/value5_id = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ parentCode = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + subcode + "''" );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + parentCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если родительский товар есть в базе фронтола, то выгружаем разрезы/##CHR(13)##//##CHR(10)##/ IF ( parentID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code= " + STR( VAL( nngroup ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДРазреза = ЗАПРОС( "SELECT id FROM aspect WHERE aspectschemeid= " + aspectValue + " AND code= " + СписокРазрезов.f_num, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ aspectValue = ЕСЛИ( aspectValue == "0", "999999999", aspectValue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ value_id = ЗАПРОС( "SELECT id FROM aspvalue WHERE aspectschemeid= " + ИДСхемы + " AND /##CHR(13)##//##CHR(10)##/ aspectid= " + ИДРазреза + " AND code= " + aspectValue, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( counter == 1 )/##CHR(13)##//##CHR(10)##/ value1_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 2 )/##CHR(13)##//##CHR(10)##/ value2_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 3 )/##CHR(13)##//##CHR(10)##/ value3_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 4 )/##CHR(13)##//##CHR(10)##/ value4_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 5 )/##CHR(13)##//##CHR(10)##/ value5_id = value_id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" ); // Вычисляем ИД разрезов для добавления в таблицу remain/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remain (id, wareid, aspectvalue1id, aspectvalue2id, aspectvalue3id, /##CHR(13)##//##CHR(10)##/ aspectvalue4id, aspectvalue5id, price ) VALUES ( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + parentID + ", " + value1_id + ", /##CHR(13)##//##CHR(10)##/ " + value2_id + ", " + value3_id + ", " + value4_id + ", /##CHR(13)##//##CHR(10)##/ " + value5_id + ", " + STR( cena, 8, 2) + ")", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Необходимо добавить соответствующее количество записей в barcode/##CHR(13)##//##CHR(10)##/// Перед добавлением необходимо очистить таблицу со штриховыми кодами/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM barcode WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь можно добавлять/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE barcode <> '''' AND code= ''" + mCode + "''", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДШК = ЗАПРОС( "SELECT id FROM barcode WHERE wareid = " + ИДТовара + " AND barcode = ''" + STDF( barcode, 30 ) + "''", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДШК == 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO barcode ( id, wareid, barcode, factor, aspectvalue1id, aspectvalue2id, /##CHR(13)##//##CHR(10)##/ aspectvalue3id, aspectvalue4id, aspectvalue5id ) VALUES ( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + ИДТовара + ", ''" + STDF( barcode, 30 ) + "'', " + STR( koef, 16, 3 ) + ", " + value1_id + ",/##CHR(13)##//##CHR(10)##/ " + value2_id + ", " + value3_id + ", " + value4_id + ", " + value5_id + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем имеющийся объект скидки, содержащий данный товар/##CHR(13)##//##CHR(10)##/// Затем добавляем новый объект скидки, содержащий только этот товар/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE WareID = " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, WareID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ CardID, PaymentID, ClientID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + ИДТовара + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬМОДИФИКАТОРЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬМОДИФИКАТОР( КОД, ИДПАПКИ, ИДТОВАРА, КОЛИЧЕСТВО, ПРИЗНАКПАПКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Орпеделяем код группы во Фронтол/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT id FROM kit WHERE code= " + КОД, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ИД ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO kit ( ID, Code, ParentID, Name, Text, IsFolder, WareID, Quantity, ChoiceOne, RepeatChoice, Weight )/##CHR(13)##//##CHR(10)##/ VALUES ( " + ИД + ", " + КОД + ", " + ИДПАПКИ + ", ''" + STDF( name ) + "'', ''" + STDF( name )+ "'', " + ПРИЗНАКПАПКИ + ", " + ИДТОВАРА + ", " + КОЛИЧЕСТВО + ", "/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( f_singleModifier, "1", "0" ) + ", " + ЕСЛИ( f_repeateModifier, "1", "0" ) + ", NULL )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE kit SET /##CHR(13)##//##CHR(10)##/ ParentID = " + ИДПАПКИ + ", /##CHR(13)##//##CHR(10)##/ Name = ''" + STDF( name ) + "'',/##CHR(13)##//##CHR(10)##/ Text = ''" + STDF( name ) + "'',/##CHR(13)##//##CHR(10)##/ IsFolder = 1, /##CHR(13)##//##CHR(10)##/ WareID = " + ИДТОВАРА + ", /##CHR(13)##//##CHR(10)##/ Quantity = " + КОЛИЧЕСТВО + ", /##CHR(13)##//##CHR(10)##/ ChoiceOne = " + ЕСЛИ( f_singleModifier, "1", "0" ) + ", /##CHR(13)##//##CHR(10)##/ RepeatChoice = " + ЕСЛИ( f_repeateModifier, "1", "0" ) + ",/##CHR(13)##//##CHR(10)##/ Weight = NULL/##CHR(13)##//##CHR(10)##/ WHERE ID = " + ИД, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ RETURN ИД;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ // Так как модификаторы выгружаются полностью, то удаляем их все/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM kit", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprtkit", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ001 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), 0, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ002 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), ИДПАПКИ001, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ003 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), ИДПАПКИ002, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки групп модификаторов." + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, /##CHR(13)##//##CHR(10)##/ nnlinks.identity_column, 0 AS f_singleModifier, 0 AS f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = "NULL";/##CHR(13)##//##CHR(10)##/ ИДПАПКИ = ЗАПРОС( "SELECT id FROM kit WHERE code= " + STR( VAL( group_ ) + 1000000000 ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( maincode ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬМОДИФИКАТОР( STR( identity_column ), ИДПАПКИ, ИДТОВАРА, STR( kolp_1, 10, 3 ), 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки модификаторов. Код товара: " + СписокКомплектации.maincode + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, MAX( nnlinks.group_ ) AS group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''/##CHR(13)##//##CHR(10)##/ GROUP BY sprres.maincode", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( maincode ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДГРУППЫ = ЗАПРОС( "SELECT id FROM kit WHERE code= " + STR( VAL( group_ ) + 1000000000 ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИДТОВАРА ) AND !ПУСТО( ИДГРУППЫ ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO SprTKit ( ID, WareID, KitID ) VALUES ( " + ИД + ", " + ИДТОВАРА + ", " + ИДГРУППЫ + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки модификаторов. Код товара: " + СписокКомплектации.maincode + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь просто закрываем соединение/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/grpCCardID = "null";/##CHR(13)##//##CHR(10)##/frontolCounterID = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для ODBC определяем /##CHR(13)##//##CHR(10)##/mainGRPCCardID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в константах системы есть запись под именем _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ, то ищем этот счетчик во Фронтоле/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ" ) != "I" AND ТИП( "_КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ" ) != "B" );/##CHR(13)##//##CHR(10)##/ _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ ) )/##CHR(13)##//##CHR(10)##/ frontolCounterID = ЗАПРОС( "SELECT ID FROM CounterType WHERE code= " + STR( _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем список карт проходим по нему, добавляя необходимую информацию по фронтол/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКарт" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = ЕСЛИ( ПУСТО( card_type ), "1", card_type );/##CHR(13)##//##CHR(10)##/ mState = ЕСЛИ( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, STR( vtype - 1 ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = value;/##CHR(13)##//##CHR(10)##/ mCard_type = card_type;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = cardn; /##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( ПУСТО( str_date ), "null", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( ПУСТО( end_date ), "null", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если обороты по карте еще не расчитаны, то расчитываем/##CHR(13)##//##CHR(10)##/ IF ( !f_calculated )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Рассчитываем обороты и почещения текущей карты. Если с картой связана скидка, то возможно надо считать оборот за сколько-то дней/##CHR(13)##//##CHR(10)##/ client_trn_days = 0;/##CHR(13)##//##CHR(10)##/ client_qtv_days = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ client_trn_days = ЗАПРОС( "SELECT client_trn_days FROM specmdiscount WHERE code = ''" + discount + "''" );/##CHR(13)##//##CHR(10)##/ client_qtv_days = ЗАПРОС( "SELECT client_qtv_days FROM specmdiscount WHERE code = ''" + discount + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ saldo = ЗАПРОС( "SELECT dbo.fn_calccard_turnover( ''" + code + "'', '''', " + client_trn_days +" )" );/##CHR(13)##//##CHR(10)##/ counter = ЗАПРОС( "SELECT dbo.fn_calccard_counter( ''" + code + "'', '''', " + client_qtv_days +" )" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = СТРОКА( saldo, 16, 2 );/##CHR(13)##//##CHR(10)##/ mCardCounter = СТРОКА( counter );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // По типу карты определяем ИД ее типа/##CHR(13)##//##CHR(10)##/ // Если карта стандартного типа, то берем уже определенное значение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( card_type ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mainGRPCCardID == "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mainGRPCCardID = ЗАПРОС( "SELECT id FROM GrpCCard WHERE code= 1", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( mainGRPCCardID ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "В ККМ нет Вида дисконтных карт с кодом 1. " + CHR( 13 ) + "Выгрузка дисконтных карт прервана." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ grpCCardID = mainGRPCCardID;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Иначе определяем его/##CHR(13)##//##CHR(10)##/ grpCCardID = ЗАПРОС( "SELECT ID FROM GrpCCard WHERE code= " + STR( VAL( card_type ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( grpCCardID ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "В карте " + cardn + " указан Вид дисконтной карты " + card_type + "." + CHR( 13 ) + "В ККМ нет вида карт с таким кодом. " + CHR( 13 ) + "Выгрузка дисконтных карт прервана." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ grpCCardID = ЕСЛИ( ПУСТО( grpCCardID ), "null", СТРОКА( grpCCardID ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE code= " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ mCardn = "''" + STDF( cardn, 40 ) + "''";/##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( ПУСТО( str_date ), "null", "''" + DTOC( str_date ) + "''" );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( ПУСТО( end_date ), "null", "''" + DTOC( end_date ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( cardID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE CCard/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", GrpCCardID = " + grpCCardID + ", Val= " + mCardn + ",/##CHR(13)##//##CHR(10)##/ ExpDateBeg = " + mStart_date + ", ExpDateEnd= " + mEnd_Date + ",/##CHR(13)##//##CHR(10)##/ state = " + mState + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + cardID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Обновляем оборот по карте/##CHR(13)##//##CHR(10)##/ // Если указан счетчик для оборотов карт, то добавляем запись в счетчики/##CHR(13)##//##CHR(10)##/ IF ( frontolCounterID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Определяем ИД счетчика оборотов карты/##CHR(13)##//##CHR(10)##/ turnoverID = ЗАПРОС( "SELECT id /##CHR(13)##//##CHR(10)##/ FROM Counterd/##CHR(13)##//##CHR(10)##/ INNER JOIN Counter ON Counterd.counterid = Counter.id/##CHR(13)##//##CHR(10)##/ INNER JOIN CCardCounter ON CCardCounter.counterid = Counter.id/##CHR(13)##//##CHR(10)##/ WHERE Counterd.DType = 1 AND CCardCounter.cardID = " + cardID + " AND /##CHR(13)##//##CHR(10)##/ Counter.CounterTypeID = " + frontolCounterID, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Counterd SET Delta= " + mSaldo + " WHERE id = " + turnoverID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO CCard( ID, Code, GrpCCardID, Val, ExpDateBeg, ExpDateEnd, State ) /##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + cardID + ",/##CHR(13)##//##CHR(10)##/ " + mCode + ", " + grpCCardID + ", " + mCardn + ",/##CHR(13)##//##CHR(10)##/ " + mStart_date + ", " + mEnd_date + ", " + mState + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если указан счетчик для оборотов карт, то добавляем запись в счетчики/##CHR(13)##//##CHR(10)##/ IF ( frontolCounterID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Создаем счетчик/##CHR(13)##//##CHR(10)##/ counterID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ counterCode = ЗАПРОС( "SELECT MAX( code ) AS code FROM Counter", "code", СОЕДИНЕНИЕФРОНТОЛ ) + 1;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Counter( ID, code, CounterTypeID )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + counterID + ",/##CHR(13)##//##CHR(10)##/ " + counterCode + ", " + frontolCounterID + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Связываем новый счетчик с картой/##CHR(13)##//##CHR(10)##/ cardCounterID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO CCardCounter( ID, CCardID, CounterID ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + cardCounterID + ", " + cardID + ", " + counterID + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем оборот/##CHR(13)##//##CHR(10)##/ turnoverID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Counterd( ID, CounterID, Delta, DType )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + turnoverID + ", " + counterID + ", " + mCardSaldo + ", 1 ) ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE cardID = " + cardID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, CardID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, ClientID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + cardID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКарт" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mSex = СТРОКА( sex );/##CHR(13)##//##CHR(10)##/ mZdate = "null";/##CHR(13)##//##CHR(10)##/ mRdate = "null";/##CHR(13)##//##CHR(10)##/ mIndex = "null";/##CHR(13)##//##CHR(10)##/ mCity = "null";/##CHR(13)##//##CHR(10)##/ mWeb = "null";/##CHR(13)##//##CHR(10)##/ mINN = "null";/##CHR(13)##//##CHR(10)##/ mDOC = "null";/##CHR(13)##//##CHR(10)##/ mOKPO = "null";/##CHR(13)##//##CHR(10)##/ mOKPD = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, STR( vtype - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = "''" + STDF( name, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mCtext = "''" + STDF( ctext, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mNote = "''" + STDF( note, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mTelephon = "''" + STDF( telefon ) + "''";/##CHR(13)##//##CHR(10)##/ mAddress = "''" + STDF( address ) + "''";/##CHR(13)##//##CHR(10)##/ mEMail = "''" + STDF( email ) + "''";/##CHR(13)##//##CHR(10)##/ mBirthdate = ЕСЛИ( ПУСТО( birthdate ), "null", "''" + DTOC( birthdate ) + "''" );/##CHR(13)##//##CHR(10)##/ mRdate = "''" + DTOC( ДАТА( ) ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( clientID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Client/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", ParentID = " + parentID + ", Name = " + mName + ",/##CHR(13)##//##CHR(10)##/ Text = " + mCtext + ", IsFolder = 0, Description = " + mNote + ",/##CHR(13)##//##CHR(10)##/ Sex = " + mSex + ", MemDate = " + mZdate + ", BirthDate = " + mBirthdate + ",/##CHR(13)##//##CHR(10)##/ RegDate = " + mRdate + ", ZipCode = " + mIndex + ", City = " + mCity + ",/##CHR(13)##//##CHR(10)##/ Address = " + mAddress + ", Email = " + mEMail + ", Web = " + mWEB + ",/##CHR(13)##//##CHR(10)##/ Telephone = " + mTelephon + ", INN = " + mINN + ",/##CHR(13)##//##CHR(10)##/ Document = " + mDOC + ", OKPO = " + mOKPO + ", OKPD = " + mOKPD + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + clientID, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ clientID= ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Client( ID, Code, ParentID, Name, Text, IsFolder, Description, Sex,/##CHR(13)##//##CHR(10)##/ MemDate, BirthDate, RegDate, ZipCode, City, Address, Email, Web,/##CHR(13)##//##CHR(10)##/ Telephone, INN, Document, OKPO, OKPD ) VALUES (/##CHR(13)##//##CHR(10)##/ " + clientID + ",/##CHR(13)##//##CHR(10)##/ " + mCode + ", " + parentID + ", " + mName + ", " + mCtext + ", 0,/##CHR(13)##//##CHR(10)##/ " + mNote + ", " + mSex + ", " + mZdate + ", " + mBirthdate + ",/##CHR(13)##//##CHR(10)##/ " + mRdate + ", " + mIndex + "," + mCity + ", " + mAddress + ",/##CHR(13)##//##CHR(10)##/ " + mEMail + ", " + mWeb + "," + mTelephon + ", " + mINN + ", " + mDOC + ",/##CHR(13)##//##CHR(10)##/ " + mOKPO + ", " + mOKPD + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ) , "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE clientID = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + clientID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Перед загрузкой карт клиентов необходимо удалить имеющиеся связи/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT cln.code AS clientcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE Code= " + VAL( СписокКлиентов.clientCode ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard WHERE ClientID= " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code/##CHR(13)##//##CHR(10)##/ WHERE cln.code = ''" + СписокКлиентов.clientCode + "''", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE Code= " + VAL( СписокКартКлиентов.cardCode ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ClientCard ( ID, ClientID, CCardID ) VALUES (/##CHR(13)##//##CHR(10)##/ gen_id( gid, 1 ), " + STR( clientID ) + ", " + STR( cardID ) + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клиента, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = STR( RECNO( ) + 1 );/##CHR(13)##//##CHR(10)##/ mClient = ЕСЛИ( client_folder, СТРОКА( 1000000000 + clientfolder_ic ), ЕСЛИ( ПУСТО( client ), "", СТРОКА( VAL( client ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = ЕСЛИ( ПУСТО( card ), "", СТРОКА( VAL( card ) ) );/##CHR(13)##//##CHR(10)##/ mWare = ЕСЛИ( ware_folder, СТРОКА( 1000000000 + warefolder_ic ), maincode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ clientID = -1;/##CHR(13)##//##CHR(10)##/ cardID = -1;/##CHR(13)##//##CHR(10)##/ tmcID = -1;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mClient ) )/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mClient , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mCard ) )/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE code = " + mCard , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mClient ) )/##CHR(13)##//##CHR(10)##/ tmcID = ЗАПРОС( "SELECT id FROM sprt WHERE code = " + mWare , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ clientID = ЕСЛИ( ПУСТО( clientID ) , "-1", clientID );/##CHR(13)##//##CHR(10)##/ cardID = ЕСЛИ( ПУСТО( cardID ) , "-1", cardID );/##CHR(13)##//##CHR(10)##/ tmcID = ЕСЛИ( ПУСТО( tmcID ) , "-1", tmcID );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( gen_id( gid, 1 ), " + clientID + ", " + discountID + ", " + condID + ", /##CHR(13)##//##CHR(10)##/ " + tmcID + ", -1, " + cardID + ", -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',233.00000000,'//Создавать таблицу с товарами/##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM " + CHR( 34 ) + "USER" + CHR( 34 ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ profileID = ЗАПРОС( "SELECT id FROM profile WHERE code = " + profile, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( profileID > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ userID = ЗАПРОС( "SELECT id FROM " + CHR( 34 ) + "USER" + CHR( 34 ) + " WHERE code = " + VAL( code ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( userID == 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + CHR( 34 ) + "USER" + CHR( 34 ) + " (id, code, name, text, profileid, pswrd, card )/##CHR(13)##//##CHR(10)##/ VALUES( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + VAL( code ) + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( name, 100 ) + "'', ''" + STDF( chequetext, 100 )+"'', /##CHR(13)##//##CHR(10)##/ " + profileID + ", " + STDF( password ) + ", ''" + STDF( ex_code ) + "'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + CHR( 34 ) + "USER" + CHR( 34 ) + " (id, name, text, profileid, pswrd, card )/##CHR(13)##//##CHR(10)##/ VALUES( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), /##CHR(13)##//##CHR(10)##/ name= ''" + STDF( name, 100 ) + "'', text= ''" + STDF( chequetext, 100 )+"'', /##CHR(13)##//##CHR(10)##/ profileid= " + profileID + ", pswrd= " + STDF( password ) + ", card= ''" + STDF( ex_code ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + userID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НАЧАЛОПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ НАЧАЛОПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОНЕЦПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ КОНЕЦПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕФРОНТОЛ;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Фронтол." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕФРОНТОЛ = ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ( -1 );/##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе Фронтол - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕФРОНТОЛ < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите. Чтение данных из ККМ ''" + name + "''." );/##CHR(13)##//##CHR(10)##/Условие = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 1 ) // Новые транзакции/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT tranzcount, tranztime, tranzdate /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt /##CHR(13)##//##CHR(10)##/ WHERE identity_column = ( SELECT MAX( identity_column )/##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' )", "ПоследняяТранзация", 1, -1 );/##CHR(13)##//##CHR(10)##/ ПоследняяТранзакция = ПоследняяТранзация.tranzcount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПоследняяТранзакцияФронтол = ЗАПРОС( "SELECT MAX(tranzCount) AS tranzcount FROM tranzt", "tranzcount", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПоследняяТранзакцияФронтол >= ПоследняяТранзакция )/##CHR(13)##//##CHR(10)##/ Условие = "(t.tranzcount > " + ПоследняяТранзакция + ")";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Загрузка будет произведена с " + DTOC( ПоследняяТранзация.TranzDate ) + " " + /##CHR(13)##//##CHR(10)##/ RIGHT( TTOC( ПоследняяТранзация.TranzTime ), 8 ), "Внимание", 36 ) != 6 )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ Условие = "(t.tranzdate > ''" + DTOC( ПоследняяТранзация.TranzDate ) + "'' OR /##CHR(13)##//##CHR(10)##/ (t.tranzdate = ''" + DTOC( ПоследняяТранзация.TranzDate ) + "'' AND t.tranztime > ''" + RIGHT( TTOC( ПоследняяТранзация.TranzTime ), 8 ) + "'' ) )";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 2 ) // Указанный период/##CHR(13)##//##CHR(10)##/ Условие = "( t.tranzdate > ''" + DTOC( НАЧАЛОПЕРИОДА ) + "'' OR ( t.tranzdate = ''" + DTOC( НАЧАЛОПЕРИОДА ) + "'' AND t.tranztime > ''" + TTOC( НАЧАЛОПЕРИОДА, 8) + "'' ) ) AND /##CHR(13)##//##CHR(10)##/ ( t.tranzdate < ''" + DTOC( КОНЕЦПЕРИОДА ) + "'' OR ( t.tranzdate = ''" + DTOC( КОНЕЦПЕРИОДА ) + "'' AND t.tranztime < ''" + TTOC( КОНЕЦПЕРИОДА, 8 ) + "'' ) ) ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 3 ) // По номерам смен/##CHR(13)##//##CHR(10)##/ Условие = "( d.ecrsession >= " + ПЕРВАЯСМЕНА + " AND d.ecrsession <= " + ПОСЛЕДНЯЯСМЕНА + " )";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 4 ) // Все транзакции/##CHR(13)##//##CHR(10)##/ Условие = "( 1 = 1 )";/##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 5 ) // Последняя смена/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вычисляем максимальный номер кассовой смены/##CHR(13)##//##CHR(10)##/ НомерСмены = ЗАПРОС( "SELECT d.ecrsession/##CHR(13)##//##CHR(10)##/ FROM document d /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN tranzt t ON d.id = t.documentid/##CHR(13)##//##CHR(10)##/ WHERE t.tranztype = 61 OR t.tranztype = 63/##CHR(13)##//##CHR(10)##/ ORDER BY t.tranzdate DESC, t.tranztime DESC", "ecrsession", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Условие = "( d.ecrsession = " + НомерСмены + " )";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Достаем данные из базы данных фронтола/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT d.id, /##CHR(13)##//##CHR(10)##/ COALESCE(t.tranzCount,0) AS tranzcount, t.tranzdate, CAST( t.tranztime AS char(20) ) AS tranztime, t.tranzhour, t.tranztype,/##CHR(13)##//##CHR(10)##/ 0 AS posnumber, d.chequenumber, t.seller, t.warecode, t.waremark, t.barcode, t.factor,/##CHR(13)##//##CHR(10)##/ t.aspectscheme, t.aspectvalue1, t.aspectvalue2, t.aspectvalue3, t.aspectvalue4, t.aspectvalue5,/##CHR(13)##//##CHR(10)##/ t.price, t.quantity, t.summ, t.pricewd, t.summwd, d.chequetype, 0 AS isret, d.ecrsession,/##CHR(13)##//##CHR(10)##/ t.info, t.infostr, t.currency, 0 AS tranzcountref, 0 AS prnonecr, t.PrintGroupClose AS ecrnumber, t.posid,/##CHR(13)##//##CHR(10)##/ t.posnumb, d.education, t.summdiscpos, t.summdiscrec, t.commentcode, k.code AS DockIndCode,/##CHR(13)##//##CHR(10)##/ 0 AS restored, d.saved, t.countfills, t.countprints, t.orderpos, d.id AS documentID,/##CHR(13)##//##CHR(10)##/ d.aspectscheme AS document_aschem, d.aspectvalue1 AS document_avalue1,/##CHR(13)##//##CHR(10)##/ d.aspectvalue2 AS document_avalue2, d.aspectvalue3 AS document_avalue3,/##CHR(13)##//##CHR(10)##/ d.aspectvalue4 AS document_avalue4, d.aspectvalue5 AS document_avalue5,/##CHR(13)##//##CHR(10)##/ d.state AS document_state, d.isfiscal AS document_isfiscal, c.code AS document_client,/##CHR(13)##//##CHR(10)##/ CAST( d.employeecode AS char(10) ) AS manager/##CHR(13)##//##CHR(10)##/ FROM document d /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN tranzt t ON d.id = t.documentid/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN DocKind k ON d.DocKindID = k.ID/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN client c ON d.clientid = c.id /##CHR(13)##//##CHR(10)##/ WHERE " + Условие + " ORDER BY t.tranzCount", "ТранзакцииФронтол", "Пожалуйста, подождите. Чтение данных из ККМ", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Заканчиваем соединение с Фронтол/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КОЛИЧЕСТВОСТРОК( "ТранзакцииФронтол" ) );/##CHR(13)##//##CHR(10)##/СтрокОбработано = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ТранзакцииФронтол" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокОбработано++;/##CHR(13)##//##CHR(10)##/ if ( СтрокОбработано % 10 == 0 ) ИНДИКАТОР( СтрокОбработано, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = ТранзакцииФронтол.tranzcount;/##CHR(13)##//##CHR(10)##/ tranzDate = DTOC( ТранзакцииФронтол.tranzdate );/##CHR(13)##//##CHR(10)##/ tranzTime = LEFT( ТранзакцииФронтол.tranztime, 8 );/##CHR(13)##//##CHR(10)##/ tranzType = ТранзакцииФронтол.tranztype;/##CHR(13)##//##CHR(10)##/ POSNumber = ТранзакцииФронтол.posnumber;/##CHR(13)##//##CHR(10)##/ chequeNumber = ТранзакцииФронтол.chequenumber;/##CHR(13)##//##CHR(10)##/ Seller = ТранзакцииФронтол.seller;/##CHR(13)##//##CHR(10)##/ wareCode = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ КодОплаты = ТранзакцииФронтол.info;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mAspectValue1 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue1 ), СТРОКА( ТранзакцииФронтол.aspectValue1 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue2 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue2 ), СТРОКА( ТранзакцииФронтол.aspectValue2 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue3 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue3 ), СТРОКА( ТранзакцииФронтол.aspectValue3 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue4 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue4 ), СТРОКА( ТранзакцииФронтол.aspectValue4 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue5 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue5 ), СТРОКА( ТранзакцииФронтол.aspectValue5 ), "" );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mAspectValue1 ) OR !ПУСТО( mAspectValue2 ) OR !ПУСТО( mAspectValue3 ) OR !ПУСТО( mAspectValue4 ) OR !ПУСТО( mAspectValue5 ) )/##CHR(13)##//##CHR(10)##/ AspectsList = mAspectValue1 + "," + mAspectValue2 + "," + mAspectValue3 + "," + mAspectValue4 + "," + mAspectValue5;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Price = ТранзакцииФронтол.price;/##CHR(13)##//##CHR(10)##/ Quantity = ТранзакцииФронтол.quantity;/##CHR(13)##//##CHR(10)##/ chequeType = ТранзакцииФронтол.chequetype;/##CHR(13)##//##CHR(10)##/ ecrSession = ТранзакцииФронтол.ecrsession;/##CHR(13)##//##CHR(10)##/ PriceWD = ТранзакцииФронтол.pricewd;/##CHR(13)##//##CHR(10)##/ SummWD = ТранзакцииФронтол.summwd;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ТранзакцииФронтол.ecrnumber;/##CHR(13)##//##CHR(10)##/ wareMark = ТранзакцииФронтол.waremark;/##CHR(13)##//##CHR(10)##/ barcode = ТранзакцииФронтол.barcode;/##CHR(13)##//##CHR(10)##/ Summ = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ currency = ТранзакцииФронтол.currency;/##CHR(13)##//##CHR(10)##/ education = ТранзакцииФронтол.education;/##CHR(13)##//##CHR(10)##/ dockIndCode = ТранзакцииФронтол.DockIndCode;/##CHR(13)##//##CHR(10)##/ commentCode = ТранзакцииФронтол.commentcode;/##CHR(13)##//##CHR(10)##/ universalNDOK = ТранзакцииФронтол.documentID;/##CHR(13)##//##CHR(10)##/ karta = ТранзакцииФронтол.infostr;/##CHR(13)##//##CHR(10)##/ documentClient = ТранзакцииФронтол.document_client;/##CHR(13)##//##CHR(10)##/ manager = ТранзакцииФронтол.manager;/##CHR(13)##//##CHR(10)##/ warecode_org = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranztype, 40, 41, 43 ) )/##CHR(13)##//##CHR(10)##/ mAspectValue1 = СТРОКА( КодОплаты );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = Quantity ;/##CHR(13)##//##CHR(10)##/ summasale = SummWD;/##CHR(13)##//##CHR(10)##/ summa = Summ;/##CHR(13)##//##CHR(10)##/ cena = Price;/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == 61 AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == 63 AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + ecrSession );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + ecrSession + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == 55 AND documentClient <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + documentClient );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + chequeNumber );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == 56 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + chequeNumber ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == 43 AND КодОплаты <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + chequeNumber + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranzType, 1, 11, 2, 12 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> 6 AND chequeType <> 14 AND chequeType <> 15 AND chequeType <> 16, "008", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ2 ) == dockIndCode, "007", ЕСЛИ( VAL( КОДФРОНТ3 ) == dockIndCode, "001", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ4 ) == dockIndCode, "002", ЕСЛИ( VAL( КОДФРОНТ5 ) == dockIndCode, "003", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ6 ) == dockIndCode, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == 14 OR chequeType == 15, "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = ЕСЛИ( !ПУСТО( mAspectValue1 ) AND mAspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = ЕСЛИ( !ПУСТО( mAspectValue2 ) AND mAspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = ЕСЛИ( !ПУСТО( mAspectValue3 ) AND mAspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = ЕСЛИ( !ПУСТО( mAspectValue4 ) AND mAspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = ЕСЛИ( !ПУСТО( mAspectValue5 ) AND mAspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ТОВАРИНФО.cat == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ТОВАРИНФО.cat == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), СТРОКА( ТОВАРИНФО.weight, 10, 3 ) + " " + ТОВАРИНФО.ed_weight, "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), СТРОКА( ТОВАРИНФО.d_litr, 10, 3 ) + " " + ТОВАРИНФО.edd_litr , "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( !ПУСТО( ТОВАРИНФО.name ), ТОВАРИНФО.name + ЕСЛИ( !ПУСТО( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( !ПУСТО( ТОВАРИНФО.name ), ТОВАРИНФО.name, nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, mAspectValue1, IIF( f_num == 2, mAspectValue2, IIF( f_num == 3, mAspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, mAspectValue4, IIF( f_num == 5, mAspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + tranzCount + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + posNumber + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + ecrSession + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + СТРОКА( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + ecrSession + ", " + СТРОКА( summasale, 16, 3 ) + ", " + СТРОКА( summabn, 16 ,3 ) + ", " + СТРОКА( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + СТРОКА( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', ''" + mAspectValue1 + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) СООБЩЕНИЕ( "В данных не обнаружены транзакции по ФР, указанным в карточке ТО.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка выгрузки скидок в ККМ " + name;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем указанные для удаления объекты/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Во Фронтоле нет таблицы, со схемами автоматических скидок/##CHR(13)##//##CHR(10)##/ _ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDisc", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Condition", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM GrpActDisc", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM DiscRate", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCardClassifier", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCardCounter", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCounter", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientClassifier", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Client", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF( ПРИЗНАКОЧИСТКИСТАВОК )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM DiscRate", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( ABS( ic ) + 1000000000 );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ mName = STDF( name, 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ctext, 100 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( clientID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Client/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", ParentID= " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', Text= ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ IsFolder = 1/##CHR(13)##//##CHR(10)##/ WHERE id = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ clientID= ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Client (ID, Code, ParentID, Name, Text, IsFolder, RegDate, sex ) VALUES/##CHR(13)##//##CHR(10)##/ ( " + clientID + ", " + mCode +", " + parentID + ",''" + mName + "'',/##CHR(13)##//##CHR(10)##/ ''" + mCtext + "'', 1, ''" + DTOC( DATE( ) ) + "'', 0 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ) , "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE clientID = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + clientID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = STR( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = STR( ABS( ic ) + 1000000000 );/##CHR(13)##//##CHR(10)##/ mName = STDF( STRTRAN( name, ";", " " ), 100 ) ;/##CHR(13)##//##CHR(10)##/ mCtext = STDF( STRTRAN( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mRDate = "''" + DTOC( DATE( ) ) + "''";/##CHR(13)##//##CHR(10)##/ mUnion_type = ЕСЛИ( union_type > 0, ALLTRIM( STR( union_type - 1 ) ), "null" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ folderID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT id FROM GrpActDisc WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( folderID != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE DiscRate/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ",/##CHR(13)##//##CHR(10)##/ ParentID = " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', /##CHR(13)##//##CHR(10)##/ Text = ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ DiscCollOper = " + mUnion_type + ", /##CHR(13)##//##CHR(10)##/ IsFolder = 1/##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( folderID ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ folderID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO DiscRate (ID, Code, ParentID, Name, Text, DiscCollOper, IsFolder )/##CHR(13)##//##CHR(10)##/ VALUES/##CHR(13)##//##CHR(10)##/ ( " + folderID + ", " + mCode +", " + parentID + ", ''" + mName + "'',/##CHR(13)##//##CHR(10)##/ ''" + mCtext + "'', " + mUnion_type + ", 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать группу условий./##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( condID ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE GrpActDisc SET Code = " + mCode + ", Name= ''" + mName + "'', Actv= 1 WHERE id = " + condID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO GrpActDisc ( ID, Code, Name, Actv )/##CHR(13)##//##CHR(10)##/ VALUES/##CHR(13)##//##CHR(10)##/ ( " + condID + ", " + mCode +", ''" + mName + "'', 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = STDF( ЗАМЕНИТЬ( name, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ЗАМЕНИТЬ( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = СЖАТЬПРОБЕЛЫ( value );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, СТРОКА( vtype - 1 ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = СТРОКА( union_type );/##CHR(13)##//##CHR(10)##/ mF_auto = ЕСЛИ( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = ЕСЛИ( !ПУСТО( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = ЕСЛИ( !ПУСТО( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ЗАМЕНИТЬ( value_min, ";", " " );/##CHR(13)##//##CHR(10)##/ mValue_max = ЗАМЕНИТЬ( value_max, ";", " " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( ВЫЧИСЛИТЬ( mValue ), 100 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( mValue, 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mValue_min = ЕСЛИ( ПУСТО( value_min ), "null", "''" + STDF( mValue_min ) + "''" );/##CHR(13)##//##CHR(10)##/ mValue_max = ЕСЛИ( ПУСТО( value_max ), "null", "''" + STDF( mValue_max ) + "''" );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( ПУСТО( vtype ), "null", mVtype );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discID ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE DiscRate/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", /##CHR(13)##//##CHR(10)##/ ParentID = " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', /##CHR(13)##//##CHR(10)##/ Text = ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ val = ''" + mDsc_value + "'', /##CHR(13)##//##CHR(10)##/ begVal = " + mValue_min + ",/##CHR(13)##//##CHR(10)##/ endVal = " + mValue_max + ", /##CHR(13)##//##CHR(10)##/ type = " + mVtype + ",/##CHR(13)##//##CHR(10)##/ destination= " + mType_ + ", /##CHR(13)##//##CHR(10)##/ Kind = " + mF_auto + ",/##CHR(13)##//##CHR(10)##/ DiscCollOper= " + mUnion_type + ", /##CHR(13)##//##CHR(10)##/ IsFolder = 0/##CHR(13)##//##CHR(10)##/ WHERE id = " + discID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO DiscRate (ID, Code, ParentID, Name, Text, val, begVal, endVal,/##CHR(13)##//##CHR(10)##/ type, destination, kind, DiscCollOper, IsFolder )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + discID + ", " + mCode +", " + parentID + ", ''" + mName + "'', ''" + mCtext + "'', ''" + mDsc_value + "'',/##CHR(13)##//##CHR(10)##/ " + mValue_min + ", " + mValue_max + ", " + mVtype + ", " + mType_ + ", " + mF_auto + ", " + mUnion_type + ", 0 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ),0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mName = STDF( ЗАМЕНИТЬ( name, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ЗАМЕНИТЬ( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, СТРОКА( vtype - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = value;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( ВЫЧИСЛИТЬ( mValue ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( mValue );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "null";/##CHR(13)##//##CHR(10)##/ mEnd_date = "null";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = ЕСЛИ( !ПУСТО( time_min ), time_min, "null" );/##CHR(13)##//##CHR(10)##/ mTime_max = ЕСЛИ( !ПУСТО( time_max ), time_max, "null" );/##CHR(13)##//##CHR(10)##/ mWday_min = ЕСЛИ( !ПУСТО( wday_min ) OR !ПУСТО( wday_max ), STR( wday_min - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mWday_max = ЕСЛИ( !ПУСТО( wday_min ) OR !ПУСТО( wday_max ), STR( wday_max - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mKolp_min = ЕСЛИ( !ПУСТО( kolp_min ) OR !ПУСТО( kolp_max ), STR( kolp_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mKolp_max = ЕСЛИ( !ПУСТО( kolp_min ) OR !ПУСТО( kolp_max ), STR( kolp_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mSumma_min = ЕСЛИ( !ПУСТО( summa_min ) OR !ПУСТО( summa_max ), STR( summa_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mSumma_max = ЕСЛИ( !ПУСТО( summa_min ) OR !ПУСТО( summa_max ), STR( summa_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = ЕСЛИ( !ПУСТО( csumma_min ) OR !ПУСТО( csumma_max ), STR( csumma_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = ЕСЛИ( !ПУСТО( csumma_min ) OR !ПУСТО( csumma_max ), STR( csumma_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = ЕСЛИ( !ПУСТО( prefix_min ) OR !ПУСТО( prefix_max ), prefix_min, "null" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = ЕСЛИ( !ПУСТО( prefix_min ) OR !ПУСТО( prefix_max ), prefix_max, "null" );/##CHR(13)##//##CHR(10)##/ mCena_min = ЕСЛИ( !ПУСТО( cena_min ) OR !ПУСТО( cena_max ), STR( cena_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCena_max = ЕСЛИ( !ПУСТО( cena_min ) OR !ПУСТО( cena_max ), STR( cena_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = ЕСЛИ( !ПУСТО( ckolp_min ) OR !ПУСТО( ckolp_max ), STR( ckolp_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = ЕСЛИ( !ПУСТО( ckolp_min ) OR !ПУСТО( ckolp_max ), STR( ckolp_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "null";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "null";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "null";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "null";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "null";/##CHR(13)##//##CHR(10)##/ mCard_state = СТРОКА( card_state );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "null";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( mStart_date == "null" OR ПУСТО( mStart_date ), "null", "''" + mStart_date + "''" );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( mEnd_date == "null" OR ПУСТО( mEnd_date ), "null", "''" + mEnd_date + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mTime_min = ЕСЛИ( mTime_min == "null", "null", "''" + mTime_min + "''" );/##CHR(13)##//##CHR(10)##/ mTime_max = ЕСЛИ( mTime_max == "null", "null", "''" + mTime_max + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mPrefix_min = ЕСЛИ( mPrefix_min == "null", "null", "''" + STDF( mPrefix_min ) + "''" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = ЕСЛИ( mPrefix_max == "null", "null", "''" + STDF( mPrefix_max ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mBirthdaybeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthdayend = "null";/##CHR(13)##//##CHR(10)##/ mBirthmonthbeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthmonthend = "null";/##CHR(13)##//##CHR(10)##/ mBirthyearbeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthyearend = "null";/##CHR(13)##//##CHR(10)##/ mBirthDateCond = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 AND ( birthday_min != 0 OR birthday_max != 0 ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthdaybeg = СТРОКА( -birthday_min );/##CHR(13)##//##CHR(10)##/ mBirthdayend = СТРОКА( birthday_max );/##CHR(13)##//##CHR(10)##/ mBirthmonthbeg = "0";/##CHR(13)##//##CHR(10)##/ mBirthmonthend = "0";/##CHR(13)##//##CHR(10)##/ mBirthyearbeg = "0";/##CHR(13)##//##CHR(10)##/ mBirthyearend = "99";/##CHR(13)##//##CHR(10)##/ mBirthDateCond = "4";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Необходимо определить GrpActDiscID - ID группы условий/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ groupID = ЗАПРОС( "SELECT id FROM GrpActDisc WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если группы условий еще нет, то добавляем стандартную/##CHR(13)##//##CHR(10)##/ IF ( groupID == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ groupID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO GrpActDisc( ID, Code, Name, Actv, DependOtherPos ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + groupID + ", " + mParent + ", " + nName + ", 1, 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Поле groupID не должно быть пустым/##CHR(13)##//##CHR(10)##/ IF ( groupID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проверяем наличие условия с нашим кодом. Если такое есть, то сначала удалем, потом добавляем новое/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT conditionID FROM ActDisc WHERE code = " + mCode, "conditionID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDisc WHERE code = " + mCode, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Condition WHERE ID = " + condID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем новое условие/##CHR(13)##//##CHR(10)##/ // Сначала в таблицу Condition, чтобы получить ID нового условия/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Condition( ID, TimeBeg, TimeEnd, DateBeg, DateEnd, DayBeg, DayEnd,/##CHR(13)##//##CHR(10)##/ QuantityBeg, QuantityEnd, SummBeg, SummEnd, SummRecBeg,/##CHR(13)##//##CHR(10)##/ SummRecEnd, CardPrefixBeg, CardPrefixEnd, QuantityRecBeg,/##CHR(13)##//##CHR(10)##/ QuantityRecEnd, PriceBeg, PriceEnd, CardState, CardLenBeg,/##CHR(13)##//##CHR(10)##/ CardLenEnd, sex, BirthDayBeg, BirthDayEnd, BirthMonthBeg,/##CHR(13)##//##CHR(10)##/ BirthMonthEnd, BirthYearBeg, BirthYearEnd, BirthDateCond )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + condID + ",/##CHR(13)##//##CHR(10)##/ " + mTime_min + "," + mTime_max + ", " + mStart_date + ",/##CHR(13)##//##CHR(10)##/ " + mEnd_date + "," + mWday_min + ", " + mWday_max + ",/##CHR(13)##//##CHR(10)##/ " + mKolp_min + "," + mKolp_max + ", " + mSumma_min + ",/##CHR(13)##//##CHR(10)##/ " + mSumma_max + "," + mCsumma_min + ", " + mCsumma_max + ",/##CHR(13)##//##CHR(10)##/ " + mPrefix_min + "," + mPrefix_max + ", " + mCkolp_min + ",/##CHR(13)##//##CHR(10)##/ " + mCkolp_max + "," + mCena_min + ", " + mCena_max + ",/##CHR(13)##//##CHR(10)##/ " + mCard_state + "," + mCardlen_min + ", " + mCardlen_max + ", 0,/##CHR(13)##//##CHR(10)##/ " + mBirthdaybeg + "," + mBirthdayend + ", " + mBirthmonthbeg + ",/##CHR(13)##//##CHR(10)##/ " + mBirthmonthend + "," + mBirthyearbeg + ", " + mBirthyearend + ", " + mBirthDateCond +" ) ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь в таблицу заголовок ActDisc/##CHR(13)##//##CHR(10)##/ actID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDisc ( ID, Code, GrpActDiscID, Name, ConditionID, DiscrateID )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + actID + ", " + mCode + ", " + groupID + ", ''" + mName + "'',/##CHR(13)##//##CHR(10)##/ " + condID+ ", " + discID + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (ODBC)','ККМ',0.00000000,'',0.00000000,53.00000000,0,'',0.00000000,'','',0,'7F9224BB-6EF2-47BA-80EF-6038EAFFF47F',0,1,0,'26.12.2018 15:36:02') #begin #description Профиль Штрих ФР (суммовая скидка) #name Профиль Штрих ФР (суммовая скидка) #code 0000000052 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##/ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##/PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##/ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = Сумма;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана перед скидкой/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Discount( ) <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = 0.00; //ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = 0.00; //ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:55') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Штрих ФР (суммовая скидка)','ФР',0.00000000,'',0.00000000,73.00000000,0,'',0.00000000,'','',0,'F395E9EB-B7C6-4975-A265-69E542E281D7',0,1,0,'06.11.2016 23:25:55') #begin #description Сканер ШК преобразование ШК для штучного товара #name Сканер ШК преобразование ШК для штучного товара #code 0000000053 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',68.00000000,'//Проверка прочитанного штрихового кода СКАНЕРОМ ШК./##CHR(13)##//##CHR(10)##/IF ( LEFT( ШТРИХКОД, 2 ) != "26" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT maincode FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE code IN ( SELECT nn FROM sprnnbc /##CHR(13)##//##CHR(10)##/ WHERE bc = ''" + ШТРИХКОД + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode = ''" + ШТРИХКОД + "'' ) ", "СписокТоваров", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) != 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ RETURN ШТРИХКОД;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN "28" + RIGHT( "000000" + КодТовара, 6 ) + "10000";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ШТРИХКОД;',0,0,1,0,'15.05.2015 16:46:10') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК преобразование ШК для штучного товара','СКАНЕР',0.00000000,'',0.00000000,5351.00000000,0,'',0.00000000,'','',0,'7BDEBB64-B367-4378-BA6B-5E070CD03B0D',0,1,0,'15.05.2015 16:46:15') #begin #description Обмен данными с Фронтол. WIN32 V2 (модификаторы) #name Обмен данными с Фронтол. WIN32 V2 (модификаторы) #code 0000000015 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT dbo.fn_fullnnname( nn ) AS name, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0;/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',211.00000000,'',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала группы/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/IF ( КОДДОКУМЕНТА == "054" OR ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА, сторно и модификаторы/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "30" OR tranzType == "31" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:47') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (модификаторы)','ККМ',0.00000000,'',0.00000000,19.00000000,0,'',0.00000000,'','',0,'CBC4013E-B4D2-4738-B895-FCD80967C791',0,1,0,'26.12.2018 15:36:47') #begin #description МАССА-К Торговый терминал #name МАССА-К Торговый терминал #code 0000000055 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',202.00000000,'// Проверка возможности выгрузки данных в ККМ./##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕМАССА;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Масса-К Терминал." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕМАССА= ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе терминала - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕМАССА < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ( -1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано очищать список товаров - чистим все необходимые таблицы/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Очистка справочника товаров в ККМ." );/##CHR(13)##//##CHR(10)##/ IF ( !ЗАПРОС( "DELETE FROM tb_barcode WHERE id <> 0", "", СОЕДИНЕНИЕМАССА ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM tb_group WHERE id <> 0", "", СОЕДИНЕНИЕМАССА ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM tb_goods WHERE id <> 0", "", СОЕДИНЕНИЕМАССА ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM tb_contractor WHERE id <> 0", "", СОЕДИНЕНИЕМАССА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка очистки списка товаров в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем контрагентов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprclient WHERE dbo.fn_getint_ex( ''SPR'', ''S01'', ''ВыгружатьВТерминал'', code, 0, 0, '''' ) > 0", "СписокКонтрагентов", 1 );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКонтрагента = ЗАПРОС( "SELECT id FROM tb_contractor WHERE code= ''" + СписокКонтрагентов.code + "''", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если такого контрагента, то добавляем. Удалять контрагентов нельзя, т.к. все ссылки на id потеряются/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORMESSAGE + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если товар уже есть в базе данных, то удаляем связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/ IF ( ИДКонтрагента == 0 )/##CHR(13)##//##CHR(10)##/ ИДКонтрагента = ЗАПРОС( "SELECT MAX( id ) AS id FROM tb_contractor", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДКонтрагента + "/##CHR(13)##//##CHR(10)##/ EXEC usp_contractor_upd @id = @p1 output, @action = 40,@mark_deleted = 0,@code = ''" + СписокКонтрагентов.code + "'', @name = ''" + СписокКонтрагентов.name + "''/##CHR(13)##//##CHR(10)##/ SELECT @p1 ", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ") AND EXISTS( SELECT * FROM " + ТОВАРЫ + " WHERE parent= folders.ic )/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/// Выгрузка папок через ODBC соединение/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// В базе терминала справочник не имеет иерархии, все папки на верхнем уровне/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокПапок" ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодПапки = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ ИДПапки = ЗАПРОС( "SELECT id FROM tb_group WHERE code= ''" + КодПапки + "''", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если такой папки нет, то добавляем. Удалять папки нельзя, т.к. все ссылки у вложенных товаров потеряются/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИДПапки == 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO tb_group ( code, name ) VALUES/##CHR(13)##//##CHR(10)##/ ( ''" + КодПапки + "'' ,''" + STDF( СписокПапок.name, 128 ) + "'' )", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE tb_group SET /##CHR(13)##//##CHR(10)##/ name = ''" + STDF( СписокПапок.name, 128 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + ИДПапки, "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка записи папки в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/_ERRORMESSAGE = "Ошибка выгрузки товара в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОбъемВес = "";/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT ed, CASE WHEN d_litr <> 0 THEN STR(d_litr, 10, 3)+'' ''+edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR(weight, 10, 3)+'' ''+ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volwgt,/##CHR(13)##//##CHR(10)##/ CASE WHEN nnvid <> '''' AND a_proc <> 0 THEN 1 ELSE 0 END AS alco/##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/IF ( ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС )/##CHR(13)##//##CHR(10)##/ ОбъемВес = " " + СЖАТЬПРОБЕЛЫ( ТоварИнфо.volwgt );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mED = ТоварИнфо.ed;/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCode = code;/##CHR(13)##//##CHR(10)##/mName = name + ОбъемВес;/##CHR(13)##//##CHR(10)##/mCena = STR( cena * 100, 10 );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, "''" + DTOC( store_period + DATE( ) ) + "''", "NULL" );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ЗАПРОС( "SELECT id FROM tb_group WHERE code = ''" + ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) ) + "''", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##///mParent = STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/mNote = STDF( note, 1024 );/##CHR(13)##//##CHR(10)##/ПрефиксШК = LEFT( ЗАПРОС( "SELECT bctemplate FROM spredn WHERE code = ''" + mED + "''" ), 2 );/##CHR(13)##//##CHR(10)##/ФорматЭтикетки = ЗАПРОС( "SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ФорматЭтикетки'', ''" + @Товар + "'', 0, 0, '''' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДТовара = ЗАПРОС( "SELECT id FROM tb_goods WHERE code= ''" + mCode + "''", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORMESSAGE + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если товар уже есть в базе данных, то удаляем связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/IF ( ИДТовара > 0 )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "EXEC usp_barcode_sel @goods_id=" + ИДТовара, "СписокШК", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + СписокШК.id + "/##CHR(13)##//##CHR(10)##/ EXEC usp_barcode_upd @id= @p1 output, @action= 30", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "SELECT MAX( good_code_cnt ) AS id FROM vw_driver_setting", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/ ИДПараметров = ЗАПРОС( "SELECT MAX( id ) AS id FROM vw_driver_setting", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДПараметров + "/##CHR(13)##//##CHR(10)##/ EXEC usp_driver_setting_upd @id= @p1 output, @action= 40,@good_code_cnt= " + ИДТовара + "/##CHR(13)##//##CHR(10)##/ SELECT @p1 ", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДТовара = ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1 = " + ИДТовара + "/##CHR(13)##//##CHR(10)##/ EXEC usp_goods_upd @id= @p1 output, @action= 40, @mark_deleted= 0,@code= ''" + mCode + "'',@name= ''" + STDF( mName ) + "'',/##CHR(13)##//##CHR(10)##/ @goods_type_id= " + STR( waretype ) + ", @basic_unit= ''" + mED + "'',/##CHR(13)##//##CHR(10)##/ @price= " + mCena + ", @goods_group_code= ''" + mParent + "'', @tare_weight=0,/##CHR(13)##//##CHR(10)##/ @addition_percent= 0,@unit_weight= 0, @name_text_alignment_id= 1, @best_before= " + mStore_period + ",/##CHR(13)##//##CHR(10)##/ @shelf_life= 0, @certification_code= '''', @label_format_id= " + ФорматЭтикетки + ",/##CHR(13)##//##CHR(10)##/ @barcode_prefix= ''" + ПрефиксШК + "'', @charge=0, @charge_date= ''''/##CHR(13)##//##CHR(10)##/ SELECT @p1", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДШтрихКода = ЗАПРОС( "SELECT MAX( id ) AS id FROM vw_barcode", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/// Добавляем ПЛУ. Он хранится вместе со штрих-кодами/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( plu ) )/##CHR(13)##//##CHR(10)##/ ИДШтрихКода = ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДШтрихКода + "/##CHR(13)##//##CHR(10)##/ EXEC usp_barcode_upd @id= @p1 output, @action= 40, @mark_deleted= 0, @barcode=N''" + STDF( plu ) + "'',/##CHR(13)##//##CHR(10)##/ @goods_id= " + ИДТовара + ", @unit= ''шт.'', @conversion_factor= 1000, @price= 0/##CHR(13)##//##CHR(10)##/ SELECT @p1 AS id", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Переносим ШК/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT barcode FROM " + ШТРИХКОДЫ + " WHERE code= ''" + code + "''", "СписокШК", 1 );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДШтрихКода = ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДШтрихКода + "/##CHR(13)##//##CHR(10)##/ EXEC usp_barcode_upd @id= @p1 output, @action= 40, @mark_deleted= 0, @barcode=N''" + STDF( СписокШК.barcode ) + "'',/##CHR(13)##//##CHR(10)##/ @goods_id= " + ИДТовара + ", @unit= ''шт.'', @conversion_factor= 1000, @price= 0/##CHR(13)##//##CHR(10)##/ SELECT @p1 AS id", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Определяем основной ШК или ПЛУ/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( plu ) )/##CHR(13)##//##CHR(10)##/ ОсновнойШК = STDF( plu );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ОсновнойШК = ЗАПРОС( "SELECT TOP 1 bc FROM sprnnbc WHERE nn= ''" + @Товар + "'' ORDER BY identity_column " );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1 = " + ИДТовара + "/##CHR(13)##//##CHR(10)##/ EXEC usp_goods_upd @id= @p1 output, @action= 40,@main_barcode= ''" + ОсновнойШК + "''/##CHR(13)##//##CHR(10)##/ SELECT @p1", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##/// В завершение выгружаем справочник складов/##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/_ERRORMESSAGE = "Ошибка выгрузки склада в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprskl WHERE notavail = 0 AND folder = 0", "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДСклада = ЗАПРОС( "SELECT id FROM tb_store WHERE code= ''" + СписокСкладов.code + "''", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORMESSAGE + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если товар уже есть в базе данных, то удаляем связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/ IF ( ИДСклада == 0 )/##CHR(13)##//##CHR(10)##/ ИДСклада = ЗАПРОС( "SELECT MAX( id ) AS id FROM tb_store", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДСклада + "/##CHR(13)##//##CHR(10)##/ EXEC usp_store_upd @id = @p1 output, @action = 40,@mark_deleted = 0,@code = ''" + СписокСкладов.code + "'', @name = ''" + СписокСкладов.name + "''/##CHR(13)##//##CHR(10)##/ SELECT @p1 ", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕМАССА );',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',233.00000000,'//Создавать таблицу с товарами/##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/_ERRORMESSAGE = "Ошибка выгрузки оператора в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДОператора = ЗАПРОС( "SELECT id FROM tb_operator WHERE code= ''" + СправочникПользователей.code + "''", "id", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORMESSAGE + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если товар уже есть в базе данных, то удаляем связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/ IF ( ИДОператора == 0 )/##CHR(13)##//##CHR(10)##/ ИДОператора = ЗАПРОС( "SELECT MAX( id ) AS id FROM tb_operator", "id", СОЕДИНЕНИЕМАССА ) + 1;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DECLARE @p1 int/##CHR(13)##//##CHR(10)##/ SET @p1= " + ИДОператора + "/##CHR(13)##//##CHR(10)##/ EXEC usp_operator_upd @id = @p1 output, @action = 40,@mark_deleted = 0,@code = ''" + СправочникПользователей.code + "'', /##CHR(13)##//##CHR(10)##/ @name = ''" + СправочникПользователей.name + "'', @passcode = " + STR( VAL( СправочникПользователей.password ) ) + "/##CHR(13)##//##CHR(10)##/ SELECT @p1 ", "", СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕМАССА );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НАЧАЛОПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ НАЧАЛОПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОНЕЦПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ КОНЕЦПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕМАССАК;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Фронтол." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕМАССАК = ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ( -1 );/##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе Фронтол - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕМАССАК < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите. Чтение данных из ККМ ''" + name + "''." );/##CHR(13)##//##CHR(10)##/Условие = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "SET DATEFORMAT DMY", "", СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 1 ) // Новые транзакции/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT tranzcount, tranztime, tranzdate /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt /##CHR(13)##//##CHR(10)##/ WHERE identity_column = ( SELECT MAX( identity_column )/##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' )", "ПоследняяТранзация", 1, -1 );/##CHR(13)##//##CHR(10)##/ ПоследняяТранзакция = ПоследняяТранзация.tranzcount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПоследняяТранзакцияФронтол = ЗАПРОС( "SELECT MAX( id ) AS tranzcount FROM tb_transaction", "tranzcount", СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##/ IF ( ПоследняяТранзакцияФронтол >= ПоследняяТранзакция )/##CHR(13)##//##CHR(10)##/ Условие = "(t.id > " + ПоследняяТранзакция + ")";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Загрузка будет произведена с " + DTOC( ПоследняяТранзация.TranzDate ) + " " + /##CHR(13)##//##CHR(10)##/ RIGHT( TTOC( ПоследняяТранзация.TranzTime ), 8 ), "Внимание", 36 ) != 6 )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ Условие = "(t.transaction_date > ''" + TTOC( ПоследняяТранзация.TranzDate ) + "'')";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 2 ) // Указанный период/##CHR(13)##//##CHR(10)##/ Условие = "( t.transaction_date >= ''" + TTOC( НАЧАЛОПЕРИОДА ) + "'' AND t.transaction_date <= ''" + TTOC( КОНЕЦПЕРИОДА ) + "'' ) ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 3 ) // По номерам смен/##CHR(13)##//##CHR(10)##/ Условие = "( t.work_shift_number >= " + ПЕРВАЯСМЕНА + " AND t.work_shift_number <= " + ПОСЛЕДНЯЯСМЕНА + " )";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 4 ) // Все транзакции/##CHR(13)##//##CHR(10)##/ Условие = "( 1 = 1 )";/##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 5 ) // Последняя смена/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вычисляем максимальный номер кассовой смены/##CHR(13)##//##CHR(10)##/ НомерСмены = ЗАПРОС( "SELECT TOP 1 t.work_shift_number/##CHR(13)##//##CHR(10)##/ FROM tb_transaction t /##CHR(13)##//##CHR(10)##/ WHERE t.transaction_type_id = 73/##CHR(13)##//##CHR(10)##/ ORDER BY t.transaction_date DESC", "work_shift_number", СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Условие = "( t.work_shift_number = " + НомерСмены + " )";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Достаем данные из базы данных весов/##CHR(13)##//##CHR(10)##/// device_id - видимо ИД устройства, если несколько в одной базе/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT t.id, /##CHR(13)##//##CHR(10)##/ t.id AS tranzcount, t.transaction_date AS tranzdate, t.transaction_type_id AS tranztype,/##CHR(13)##//##CHR(10)##/ 0 AS posnumber, t.receipt_number AS chequenumber, t.operator_code AS seller, t.goods_code AS warecode, /##CHR(13)##//##CHR(10)##/ '''' AS waremark, t.barcode, t.price / 100.00 AS price, t.price / 100.00 AS pricewd, t.cost / 100.00 AS summ, t.cost / 100.00 AS summwd, /##CHR(13)##//##CHR(10)##/ CASE WHEN t.quantity = 0 THEN t.weight / 1000.00 ELSE CAST( t.quantity AS float ) END AS quantity, 0 AS chequetype, /##CHR(13)##//##CHR(10)##/ 0 AS isret, t.work_shift_number AS ecrsession, '''' AS info, '''' AS infostr, '''' AS currency, 0 AS tranzcountref, /##CHR(13)##//##CHR(10)##/ 0 AS prnonecr, device_id AS ecrnumber, t.document_code AS DockIndCode, 0 AS restored,/##CHR(13)##//##CHR(10)##/ contractor_code AS document_client/##CHR(13)##//##CHR(10)##/ FROM tb_transaction t /##CHR(13)##//##CHR(10)##/ WHERE " + Условие + " ORDER BY t.id", "ТранзакцииФронтол", "Пожалуйста, подождите. Чтение данных из ККМ", СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Заканчиваем соединение с Фронтол/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕМАССАК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КОЛИЧЕСТВОСТРОК( "ТранзакцииФронтол" ) );/##CHR(13)##//##CHR(10)##/СтрокОбработано = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ТранзакцииФронтол" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокОбработано++;/##CHR(13)##//##CHR(10)##/ if ( СтрокОбработано % 10 == 0 ) ИНДИКАТОР( СтрокОбработано, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = ТранзакцииФронтол.tranzcount;/##CHR(13)##//##CHR(10)##/ tranzDate = ТранзакцииФронтол.tranzdate;/##CHR(13)##//##CHR(10)##/ tranzType = ТранзакцииФронтол.tranztype;/##CHR(13)##//##CHR(10)##/ POSNumber = ТранзакцииФронтол.posnumber;/##CHR(13)##//##CHR(10)##/ chequeNumber = ТранзакцииФронтол.chequenumber;/##CHR(13)##//##CHR(10)##/ Seller = VAL( ТранзакцииФронтол.seller );/##CHR(13)##//##CHR(10)##/ wareCode = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ КодОплаты = ТранзакцииФронтол.info;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = ТранзакцииФронтол.price;/##CHR(13)##//##CHR(10)##/ Quantity = ТранзакцииФронтол.quantity;/##CHR(13)##//##CHR(10)##/ chequeType = ТранзакцииФронтол.chequetype;/##CHR(13)##//##CHR(10)##/ ecrSession = ТранзакцииФронтол.ecrsession;/##CHR(13)##//##CHR(10)##/ PriceWD = ТранзакцииФронтол.pricewd;/##CHR(13)##//##CHR(10)##/ SummWD = ТранзакцииФронтол.summwd;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ТранзакцииФронтол.ecrnumber;/##CHR(13)##//##CHR(10)##/ wareMark = ТранзакцииФронтол.waremark;/##CHR(13)##//##CHR(10)##/ barcode = ТранзакцииФронтол.barcode;/##CHR(13)##//##CHR(10)##/ Summ = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ currency = ТранзакцииФронтол.currency;/##CHR(13)##//##CHR(10)##/ dockIndCode = ТранзакцииФронтол.DockIndCode;/##CHR(13)##//##CHR(10)##/ karta = ТранзакцииФронтол.infostr;/##CHR(13)##//##CHR(10)##/ documentClient = ТранзакцииФронтол.document_client;/##CHR(13)##//##CHR(10)##/ warecode_org = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = tranzDate;/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = Quantity ;/##CHR(13)##//##CHR(10)##/ summasale = SummWD;/##CHR(13)##//##CHR(10)##/ summa = Summ;/##CHR(13)##//##CHR(10)##/ cena = Price;/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( tranzType == 73 AND ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + ecrSession - 1 );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == 71 AND !ПУСТО( documentClient ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= ''" + documentClient + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + chequeNumber );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == 72 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE chequeNumber = " + chequeNumber );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == 43 AND КодОплаты <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + chequeNumber + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // 1 Этикетирование/##CHR(13)##//##CHR(10)##/ // 2 Приём/##CHR(13)##//##CHR(10)##/ // 3 Отпуск/##CHR(13)##//##CHR(10)##/ // 4 Продажа/##CHR(13)##//##CHR(10)##/ // 5 Инвентаризация/##CHR(13)##//##CHR(10)##/ // 6 Списание/##CHR(13)##//##CHR(10)##/ // 7 Событие/##CHR(13)##//##CHR(10)##/ // 21 Возврат поставщику/##CHR(13)##//##CHR(10)##/ // 31 Возврат от потребителя/##CHR(13)##//##CHR(10)##/ // 41 Возврат от покупателя/##CHR(13)##//##CHR(10)##/ // 71 Закрытие партии/##CHR(13)##//##CHR(10)##/ // 72 Аварийное закрытие партии/##CHR(13)##//##CHR(10)##/ // 73 Закрытие смены /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranzType, 2, 3, 4, 5, 6, 21, 31, 41 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = ЕСЛИ( tranzType == 2 , "001", ЕСЛИ( tranzType == 3 OR tranzType == 4 , "008", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( tranzType == 5 , "007", ЕСЛИ( tranzType == 6, "003", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( tranzType == 21, "055", ЕСЛИ( tranzType == 31 OR tranzType == 41, "006", "008" ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( docCode <> "008", "Операция по свободной цене", "Свободная продажа" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ТОВАРИНФО.cat == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ТОВАРИНФО.cat == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), СТРОКА( ТОВАРИНФО.weight, 10, 3 ) + " " + ТОВАРИНФО.ed_weight, "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), СТРОКА( ТОВАРИНФО.d_litr, 10, 3 ) + " " + ТОВАРИНФО.edd_litr , "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( !ПУСТО( ТОВАРИНФО.name ), ТОВАРИНФО.name + ЕСЛИ( !ПУСТО( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + tranzCount + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + posNumber + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + ecrSession + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", '''', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + СТРОКА( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + ecrSession + ", " + СТРОКА( summasale, 16, 3 ) + ", " + СТРОКА( summabn, 16 ,3 ) + ", " + СТРОКА( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + СТРОКА( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ '''', ''" + warecode_org + "'', '''' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) СООБЩЕНИЕ( "В данных не обнаружены транзакции по ФР, указанным в карточке ТО.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:37:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','МАССА-К Торговый терминал','ККМ',0.00000000,'',0.00000000,4348.00000000,0,'',0.00000000,'','',0,'631B5FA3-DA27-485F-AD3D-DA0E546AFD87',0,1,0,'26.12.2018 16:37:03') #begin #description Сканер ШК для добавления товара в документ без запроса количества #name Сканер ШК для добавления товара в документ без запроса количества #code 0000000054 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##/// Если прочитали штрихкод в приходной накладной, то ищем его среди товаров накладной/##CHR(13)##//##CHR(10)##/// Если находим, то увеличиваем количество на 1/##CHR(13)##//##CHR(10)##/_DODEFAULT = true; // По умолчанию стандартная обработка/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", " nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT nn, maincode, code, name, kodn, ed, /##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_incena( nn, '''', ''" + sklad + "'', ''001'') AS incena,/##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_cena( nn, '''', ''" + sklad + "'', ''001'') AS cena/##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE nn= ''" + Товар + "''", "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Цена = ЕСЛИ( @КодДокумента != "001", ТоварИнфо.cena, ТоварИнфо.incena );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATECELL", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ДобавитьСтроку" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nn", ТоварИнфо.nn );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "a_code", ТоварИнфо.code );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "maincode", ТоварИнфо.maincode );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nnname", ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kodn", ТоварИнфо.kodn );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "ed", ТоварИнфо.ed );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_c", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_e", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, ЕСЛИ( @КодДокумента != "007", "kolp", "kolp_real" ), 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena", Цена );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "summa", Цена );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATEGRID" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATECELL", "Кол-во" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'21.05.2015 14:43:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для добавления товара в документ без запроса количества','СКАНЕР',0.00000000,'',0.00000000,76.00000000,0,'',0.00000000,'','',0,'47E6ECFD-0E82-45E0-A638-2D1AE90FF749',0,1,0,'21.05.2015 14:43:12') #begin #description Профиль ТСД Mobile Smarts #name Профиль ТСД Mobile Smarts #code 0000000056 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = "C:\На терминал\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + "Номенклатура.csv";/##CHR(13)##//##CHR(10)##/_ФАЙЛВЫГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛВЫГРУЗКИ < 0;/##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если открыли существующий файл, то переходим в его конец. Иначе записываем заголовок файла/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, "Идентификатор;Штрихкоды;Артикул;Наименование" + ЕСЛИ( _ВЫГРУЖАТЬОСТАТКИ, ";Остаток;Цена", "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, КодТовара+";" + ШтрихКоды + ";" + Артикул + ";" + Наименование + ОстатокЦена );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИМЯФАЙЛА = _ПАПКАВЫГРУЗКИ + ЕСЛИ( СписокДокументов.code == "001", "Приход на склад", "Подбор заказа" ) + " №" + Номер + ".csv";/##CHR(13)##//##CHR(10)##/ ФАЙЛВЫГРУЗКИ= ФАЙЛСОЗДАТЬ( ИМЯФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document}" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, """Имя"";;;;;;" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document.CombinedItems}");/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, """Code"";""Штрихкоды"";""Артикул"";""Наименование"";""Nпп"";""Факт""" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, Спецификация.maincode + ";" + ШтрихКоды + ";" + Спецификация.a_code + ";" + /##CHR(13)##//##CHR(10)##/ ЗАМЕНИТЬ( Спецификация.nnname, """", "" ) + ";" + STR( НОМЕРСТРОКИ( "Спецификация" ) + 1 ) + ";" + /##CHR(13)##//##CHR(10)##/ STR( Спецификация.kolp, 16, 3 ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.05.2015 12:17:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'/##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = "C:\С терминала\";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.csv" );/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = ЕСЛИ( UPPER( LEFT( ПОДСТРОКА( _ИМЯФАЙЛАЗАГРУЗКИ, RAT( _ИМЯФАЙЛАЗАГРУЗКИ, "\" ) + 1 ), 15 ) ) == "ПРИХОД НА СКЛАД", "001", "002" );/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ // Пропускаем первые три строки - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 1 ), """", "" );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 7 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если это не код товара, то, скорее всего, это штрих код./##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ШтрихКод = КодТовара;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'')" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += КодТовара + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.05.2015 12:17:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Mobile SMARTS";',0,0,1,0,'28.05.2015 12:17:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'28.05.2015 12:17:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Mobile Smarts','ТСД',0.00000000,'',0.00000000,5354.00000000,0,'',0.00000000,'','',0,'C6D7717B-2984-47AF-9707-2BA9B138D8FD',0,1,0,'28.05.2015 12:17:03') #begin #description Профиль ТСД Mobile Smarts построчная загрузка #name Профиль ТСД Mobile Smarts построчная загрузка #code 0000000057 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = "C:\С терминала\";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.csv" );/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу для сбора данных/##CHR(13)##//##CHR(10)##/_ИМЯТАБЛИЦЫ = "##" + УНИКАЛЬНОЕИМЯ( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + _ИМЯТАБЛИЦЫ + " ( doccode char( 3 ) , docid int, date datetime, maincode char( 10 ), nnname varchar( 250 ), /##CHR(13)##//##CHR(10)##/ kolp float, cena float, summa float, barcode varchar( 50 ), firm char( 7 ), sklad char( 3 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = ЕСЛИ( UPPER( LEFT( ПОДСТРОКА( _ИМЯФАЙЛАЗАГРУЗКИ, RAT( _ИМЯФАЙЛАЗАГРУЗКИ, "\" ) + 1 ), 15 ) ) == "ПРИХОД НА СКЛАД", "001", "002" );/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ // Пропускаем первые три строки - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 1 ), """", "" );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 7 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если это не код товара, то, скорее всего, это штрих код./##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ШтрихКод = КодТовара;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, maincode, nnname, kolp, cena, summa, barcode, firm, sklad )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + STDF( КодТовара ) + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'')" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += КодТовара + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + _ИМЯТАБЛИЦЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + _ИМЯТАБЛИЦЫ );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИ( НомерЗаписи - 1, "СписокТоваров" );',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Mobile SMARTS";',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##/RETURN 11;',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОСТРОК( "СписокТоваров" );',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = "C:\На терминал\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + "Номенклатура.csv";/##CHR(13)##//##CHR(10)##/_ФАЙЛВЫГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛВЫГРУЗКИ < 0;/##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если открыли существующий файл, то переходим в его конец. Иначе записываем заголовок файла/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, "Идентификатор;Штрихкоды;Артикул;Наименование" + ЕСЛИ( _ВЫГРУЖАТЬОСТАТКИ, ";Остаток;Цена", "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, КодТовара+";" + ШтрихКоды + ";" + Артикул + ";" + Наименование + ОстатокЦена );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИМЯФАЙЛА = _ПАПКАВЫГРУЗКИ + ЕСЛИ( СписокДокументов.code == "001", "Приход на склад", "Подбор заказа" ) + " №" + Номер + ".csv";/##CHR(13)##//##CHR(10)##/ ФАЙЛВЫГРУЗКИ= ФАЙЛСОЗДАТЬ( ИМЯФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document}" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, """Имя"";;;;;;" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document.CombinedItems}");/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, """Code"";""Штрихкоды"";""Артикул"";""Наименование"";""Nпп"";""Факт""" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, Спецификация.maincode + ";" + ШтрихКоды + ";" + Спецификация.a_code + ";" + /##CHR(13)##//##CHR(10)##/ ЗАМЕНИТЬ( Спецификация.nnname, """", "" ) + ";" + STR( НОМЕРСТРОКИ( "Спецификация" ) + 1 ) + ";" + /##CHR(13)##//##CHR(10)##/ STR( Спецификация.kolp, 16, 3 ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 0 ) RETURN "КОДДОКУМЕНТА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 1 ) RETURN "ИДДОКУМЕНТА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 2 ) RETURN "ДАТА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 3 ) RETURN "ТОВАР";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 4 ) RETURN "НАИМЕНОВАНИЕ";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 5 ) RETURN "КОЛИЧЕСТВО";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 6 ) RETURN "ЦЕНА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 7 ) RETURN "СУММА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 8 ) RETURN "ШТРИХКОД";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 9 ) RETURN "ФИРМА";/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ == 10) RETURN "СКЛАД";',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "КОДДОКУМЕНТА" ) RETURN СписокТоваров.doccode;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ИДДОКУМЕНТА" ) RETURN СписокТоваров.docid;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ДАТА" ) RETURN СписокТоваров.date;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ТОВАР" ) RETURN СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "НАИМЕНОВАНИЕ" ) RETURN СписокТоваров.nnname;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "КОЛИЧЕСТВО" ) RETURN СписокТоваров.kolp;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ЦЕНА" ) RETURN СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "СУММА" ) RETURN СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ШТРИХКОД" ) RETURN СписокТоваров.barcode;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "ФИРМА" ) RETURN СписокТоваров.firm;/##CHR(13)##//##CHR(10)##/IF ( UPPER( ИмяПоля ) == "СКЛАД" ) RETURN СписокТоваров.sklad;',0,0,0,0,'25.12.2015 9:41:18') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Mobile Smarts построчная загрузка','ТСД',0.00000000,'',0.00000000,5355.00000000,0,'',0.00000000,'','',0,'61D456B3-D54A-4331-B25E-3DF25EF146C9',0,1,0,'25.12.2015 9:41:18') #begin #description Обмен данными с Фронтол X с версии 1.5 #name Обмен данными с Фронтол X с версии 1.5 #code 0000000058 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##//*IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати /##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy;// + ";;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/*/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.5','ККМ',0.00000000,'',0.00000000,86.00000000,0,'',0.00000000,'','',0,'E477A623-BA0B-44A3-98FA-71C8C983D334',0,1,0,'07.10.2016 11:25:57') #begin #description Обмен данными с Фронтол X с версии 1.6 #name Обмен данными с Фронтол X с версии 1.6 #code 0000000059 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy;// + ";;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/*/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:25:33') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.6','ККМ',0.00000000,'',0.00000000,89.00000000,0,'',0.00000000,'','',0,'43A93036-69FE-4385-A7E7-849A847DB3BC',0,1,0,'07.10.2016 11:25:33') #begin #description Сканер ШК для запроса количества в расходной накладной при повторном чтении ШК #name Сканер ШК для запроса количества в расходной накладной при повторном чтении ШК #code 0000000062 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##/// Если прочитали штрихкод в инвентаризации ТМЦ, то ищем его среди товаров /##CHR(13)##//##CHR(10)##/// Если находим, то запрашиваем количество, на которое надо увеличить реальное количество_DODEFAULT = true; // По умолчанию стандартная обработка/##CHR(13)##//##CHR(10)##/IF ( @КодДокумента == "002" AND СПИСОКОБЪЕКТОВ == false AND !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", " nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВО = _ЗНАЧЕНИЕПОЛЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''КОЛИЧЕСТВОТОВАРА''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp", КОЛИЧЕСТВО + КОЛИЧЕСТВОТОВАРА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'14.09.2015 12:41:30') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для запроса количества в расходной накладной при повторном чтении ШК','СКАНЕР',0.00000000,'',0.00000000,94.00000000,0,'',0.00000000,'','',0,'608A9E84-F1DF-40D4-85C4-AA2A924E748C',0,1,0,'14.09.2015 12:41:30') #begin #description Весы с ПЭ (драйвер АТОЛ начиная с 8.11) (прямое текстовое сообщение для CAS CL 5000J и Dibal 500 RANGE) #name Весы с ПЭ (драйвер АТОЛ начиная с 8.11) (прямое текстовое сообщение для CAS CL 5000J и Dibal 500 RANGE) #code 0000000063 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( товары )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) driverSCALE.Clear( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/driverSCALE.PLU = ПЛУ;/##CHR(13)##//##CHR(10)##/driverSCALE.ICode = VAL( КОД );/##CHR(13)##//##CHR(10)##/driverSCALE.Price = ЦЕНА;/##CHR(13)##//##CHR(10)##/driverSCALE.Name = LEFT( ALLTRIM( НАИМЕНОВАНИЕ ), 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.Name2 = SUBSTR( ALLTRIM( НАИМЕНОВАНИЕ ), 29, 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.GCode = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/driverSCALE.Tare = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.Life = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/driverSCALE.WareType = ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##/driverSCALE.Department = 26;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',44.00000000,'//Подготовка выгрузки таблицы сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( сообщения )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 1;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##///driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',45.00000000,'//Выгрузка строки сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки и перевода строки/##CHR(13)##//##CHR(10)##/driverSCALE.MessageText = STRTRAN( STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), " " ), CHR( 13 ), " " );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE;/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverSCALE") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ driverSCALE.currentDeviceNumber= НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',46.00000000,'//Окончание выгрузки таблицы сообщений в весы ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##///driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*------- Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverSCALE.currentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP45", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverSCALE.deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.11.2016 11:29:24') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер АТОЛ начиная с 8.11) (прямое текстовое сообщение для CAS CL 5000J и Dibal 500 RANGE)','ВЕСЫ',0.00000000,'',0.00000000,95.00000000,0,'',0.00000000,'','',0,'30B9A859-D518-4C16-8DD8-E2C78AB2FC3B',0,1,0,'23.11.2016 11:29:24') #begin #description Обмен данными с Фронтол X с версии 1.6.1 (ЕГАИС) #name Обмен данными с Фронтол X с версии 1.6.1 (ЕГАИС) #code 0000000065 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = LEFT( ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ТоварИнфо.volweight ), 100 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND NOT ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = LEFT( ALLTRIM( cname ), 100 );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" ) +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ",,,,,,,1", "" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем Коды Групп печати /##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy;// + /##CHR(13)##//##CHR(10)##/ //ЕСЛИ( mAlco, ";;;;;;;;;;;" + mNNVid + ";" + mVolume, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/*/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:23:41') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.6.1 (ЕГАИС)','ККМ',0.00000000,'',0.00000000,97.00000000,0,'',0.00000000,'','',0,'52400D54-CA07-4C19-8F79-967D271907D8',0,1,0,'07.10.2016 11:23:41') #begin #description Обмен данными с Фронтол РМК #name Обмен данными с Фронтол РМК #code 0000000066 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;;0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) + ";0;;";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ТоварИнфо.volweight );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = ЕСЛИ( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.name, dsc.ctext, dsc.vtype, dsc.value, dsc.f_evaluate,/##CHR(13)##//##CHR(10)##/ sch.start_date, sch.end_date,/##CHR(13)##//##CHR(10)##/ specd.cdate_day, specd.cdate_month, specd.cdate_code, specd.cdate_type, specd.cdate_day2, specd.cdate_month2,/##CHR(13)##//##CHR(10)##/ specd.time_min, specd.time_max, specd.wday_min, specd.wday_max, specd.kolp_min, specd.kolp_max, specd.summa_min, /##CHR(13)##//##CHR(10)##/ specd.summa_max, specd.csumma_min, specd.csumma_max, specd.prefix_min, specd.prefix_max, specd.cena_min, /##CHR(13)##//##CHR(10)##/ specd.cena_max, specd.ckolp_min, specd.ckolp_max, specd.card_state/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sch ON obj.schem = sch.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount specd ON specd.code = obj.discount/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( dsc_parent ),0, ABS( dsc_parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( discount ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( start_date );/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( end_date );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;" + mWare + ";" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ДЕЛИТЬДОКУМЕНТЫПОРМ = false;/##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 24 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо делить документы по рабочим местам, то преобразуем код ФР в новое значение по формуле/##CHR(13)##//##CHR(10)##/ IF ( _ДЕЛИТЬДОКУМЕНТЫПОРМ )/##CHR(13)##//##CHR(10)##/ ecrNumber = STR( PosNumber * 100 + VAL( ecrNumber ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "40" OR tranzType == "41" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'04.06.2018 18:41:12') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол РМК','ККМ',0.00000000,'',0.00000000,99.00000000,0,'',0.00000000,'','',0,'2B44EA22-EB6A-4CD8-85CA-5E00EE026441',0,1,0,'04.06.2018 18:41:12') #begin #description Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС) #name Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС) #code 0000000067 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN cat = ''001'' THEN dbo.fn_fullnnname( code ) ELSE name END AS name, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = LEFT( ALLTRIM( cname ), 100 );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/--mCena = ALLTRIM( STR( Query("SELECT dbo.fn_calcsklad_cena(''"+nn+"'', ''"+DateTime()+"'', ''"+sklad+"'', ''001'')"), 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" ) +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ",,,,,,,1", "" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем Коды Групп печати /##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/// Если не указаны коды групп печати, то берем их из кода ФР/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( kodGrPintChek ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/*/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GETWORD( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:20:39') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС)','ККМ',0.00000000,'',0.00000000,101.00000000,0,'',0.00000000,'','',0,'E1542157-E99F-44C5-A86A-8BC936BDBF76',0,1,0,'18.11.2016 11:20:39') #begin #description Обмен данными с Фронтол. WIN32 V2 (ODBC/ЕГАИС) #name Обмен данными с Фронтол. WIN32 V2 (ODBC/ЕГАИС) #code 0000000069 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС = false;/##CHR(13)##//##CHR(10)##/// Выгружать признак алкоголоя или нет./##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬПРИЗНАКАЛКОГОЛЯ = true;/##CHR(13)##//##CHR(10)##/// Выгружать ли модификаторы/##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬМОДИФИКАТОРЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',202.00000000,'//Проверка возможности выгрузки данных в ККМ./##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕФРОНТОЛ;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Фронтол." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕФРОНТОЛ= ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##///ДОБАВИТЬСОЕДИНЕНИЕ( ''Driver=Firebird/InterBase(r) driver;Dbname=D:\ATOL\DB\MAIN.GDB;CHARSET=NONE;PWD=masterkey;UID=SYSDBA;'' );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе Фронтол - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕФРОНТОЛ < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ(-1);/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано очищать список товаров - чистим все необходимые таблицы/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Очистка справочника товаров в ККМ." );/##CHR(13)##//##CHR(10)##/ IF ( !ЗАПРОС( "DELETE FROM sprt", "", СОЕДИНЕНИЕФРОНТОЛ ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM barcode", "", СОЕДИНЕНИЕФРОНТОЛ ) OR/##CHR(13)##//##CHR(10)##/ !ЗАПРОС( "DELETE FROM analog", "", СОЕДИНЕНИЕФРОНТОЛ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка очистки списка товаров в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/// Выгрузка папок через ODBC соединение/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокПапок" ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодПапки = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ КодРПапки = ALLTRIM( STR( ABS( parent ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ ИДПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + КодПапки, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДРПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + КодРПапки, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ УровеньИерархии = ЗАПРОС( "SELECT hierlevel FROM sprt WHERE code= " + КодРПапки, "hierlevel", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если такой папки нет, то добавляем. Удалять папки нельзя, т.к. все ссылки у вложенных товаров потеряются/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИДПапки == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprt WHERE code= " + КодПапки, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДПапки = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE >= 0 AND ИДПапки > 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprt (id, code, mark, name, parentid, text, isware, hierlevel, flags,/##CHR(13)##//##CHR(10)##/ scalelpdevid, scalelpwarecode, rewardtype, rewardval ) VALUES/##CHR(13)##//##CHR(10)##/ (" + ИДПапки + "," + КодПапки + " ,'''', ''" + STDF( СписокПапок.name, 100 ) + "'', " + ИДРПапки + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( СписокПапок.name, 100 )+"'', 0, " + STR( УровеньИерархии + 1 ) + ", 0, 0, 0, 0, 0)", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprt SET /##CHR(13)##//##CHR(10)##/ name = ''" + STDF( СписокПапок.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ parentid = " + ИДРПапки + ",/##CHR(13)##//##CHR(10)##/ text = ''" + STDF( СписокПапок.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ isware = 0,/##CHR(13)##//##CHR(10)##/ hierlevel = " + STR( УровеньИерархии + 1 ) + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + ИДПапки, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка записи папки в ККМ " + name + ". " + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Перед добавлением необходимо удалить схемы разрезов, которые загружаем/##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка записи схем разрезов в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspschm", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspect", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM aspvalue", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если указано, что необходимо выгружать разрезы как разрезы, а не только отдельными карточками,/##CHR(13)##//##CHR(10)##/// то выгружаем схемы разрезов и сами разрезы/##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspschm ( id, code, name, text ) VALUES /##CHR(13)##//##CHR(10)##/ ( gen_id(gid,1), " + STR( VAL( СхемыРазрезов.schemecode ) ) + ", ''" + STDF( СхемыРазрезов.name, 100 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( СхемыРазрезов.name, 100 ) + "'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ // Проходим по созданным схемам и, для каждой схемы, выгружаем связанные разрезы/##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code = " + СхемыРазрезов.schemecode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''/##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspect (id, code, aspectschemeid, name, text) VALUES ( /##CHR(13)##//##CHR(10)##/ " + НовыйИД + ", " + STR( СоставСхемы.f_num ) + ", " + STR( ИДСхемы ) + ", /##CHR(13)##//##CHR(10)##/ ''" + STDF( СоставСхемы.name, 100 ) + "'',''" + STDF( СоставСхемы.name, 100 )+"'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( НовыйИД ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code = " + СоставСхемы.schemecode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ЗначенияРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspvalue (id, code, name, text, aspectid, aspectschemeid) VALUES( /##CHR(13)##//##CHR(10)##/ " + НовыйИД + ", " + ЗначенияРазрезов.valuecode + ", /##CHR(13)##//##CHR(10)##/ ''" + STDF( ЗначенияРазрезов.name, 100 ) + "'', ''" + STDF( ЗначенияРазрезов.name, 100 ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( СоставСхемы.id ) + ", " + STR( ИДСхемы ) + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ НовыйИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( НовыйИД > 0 ) /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO aspvalue (id, code, name, text, aspectid, aspectschemeid) /##CHR(13)##//##CHR(10)##/ VALUES( " + НовыйИД + ", 999999999, '''', '''', " + STR( СоставСхемы.id ) + ", " + STR( ИДСхемы ) + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/} // IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬМОДИФИКАТОРЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬМОДИФИКАТОР( КОД, ИДПАПКИ, ИДТОВАРА, КОЛИЧЕСТВО, ПРИЗНАКПАПКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Орпеделяем код группы во Фронтол/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT id FROM kit WHERE code= " + КОД, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ИД ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO kit ( ID, Code, ParentID, Name, Text, IsFolder, WareID, Quantity, ChoiceOne, RepeatChoice, Weight )/##CHR(13)##//##CHR(10)##/ VALUES ( " + ИД + ", " + КОД + ", " + ИДПАПКИ + ", ''" + STDF( name ) + "'', ''" + STDF( name )+ "'', " + ПРИЗНАКПАПКИ + ", " + ИДТОВАРА + ", " + КОЛИЧЕСТВО + ", "/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( f_singleModifier, "1", "0" ) + ", " + ЕСЛИ( f_repeateModifier, "1", "0" ) + ", NULL )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE kit SET /##CHR(13)##//##CHR(10)##/ ParentID = " + ИДПАПКИ + ", /##CHR(13)##//##CHR(10)##/ Name = ''" + STDF( name ) + "'',/##CHR(13)##//##CHR(10)##/ Text = ''" + STDF( name ) + "'',/##CHR(13)##//##CHR(10)##/ IsFolder = 1, /##CHR(13)##//##CHR(10)##/ WareID = " + ИДТОВАРА + ", /##CHR(13)##//##CHR(10)##/ Quantity = " + КОЛИЧЕСТВО + ", /##CHR(13)##//##CHR(10)##/ ChoiceOne = " + ЕСЛИ( f_singleModifier, "1", "0" ) + ", /##CHR(13)##//##CHR(10)##/ RepeatChoice = " + ЕСЛИ( f_repeateModifier, "1", "0" ) + ",/##CHR(13)##//##CHR(10)##/ Weight = NULL/##CHR(13)##//##CHR(10)##/ WHERE ID = " + ИД, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ RETURN ИД;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ // Так как модификаторы выгружаются полностью, то удаляем их все/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM kit", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprtkit", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ001 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), 0, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ002 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), ИДПАПКИ001, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Записываем папку/##CHR(13)##//##CHR(10)##/ ИДПАПКИ003 = ЗАПИСАТЬМОДИФИКАТОР( STR( VAL( code ) + 1000000000 ), ИДПАПКИ002, "NULL", "NULL", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки групп модификаторов." + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, /##CHR(13)##//##CHR(10)##/ nnlinks.identity_column, 0 AS f_singleModifier, 0 AS f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = "NULL";/##CHR(13)##//##CHR(10)##/ ИДПАПКИ = ЗАПРОС( "SELECT id FROM kit WHERE code= " + STR( VAL( group_ ) + 1000000000 ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( maincode ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬМОДИФИКАТОР( STR( identity_column ), ИДПАПКИ, ИДТОВАРА, STR( kolp_1, 10, 3 ), 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки модификаторов. Код товара: " + СписокКомплектации.maincode + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, MAX( nnlinks.group_ ) AS group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''/##CHR(13)##//##CHR(10)##/ GROUP BY sprres.maincode", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИД = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДТОВАРА = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( maincode ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ИДГРУППЫ = ЗАПРОС( "SELECT id FROM kit WHERE code= " + STR( VAL( group_ ) + 1000000000 ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИДТОВАРА ) AND !ПУСТО( ИДГРУППЫ ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO SprTKit ( ID, WareID, KitID ) VALUES ( " + ИД + ", " + ИДТОВАРА + ", " + ИДГРУППЫ + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки модификаторов. Код товара: " + СписокКомплектации.maincode + CHR( 13 ) + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь просто закрываем соединение/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка выгрузки скидок в ККМ " + name;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем указанные для удаления объекты/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Во Фронтоле нет таблицы, со схемами автоматических скидок/##CHR(13)##//##CHR(10)##/ _ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDisc", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Condition", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM GrpActDisc", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM DiscRate", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCardClassifier", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM CCardCounter", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCounter", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientClassifier", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Client", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF( ПРИЗНАКОЧИСТКИСТАВОК )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM DiscRate", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = STR( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = STR( ABS( ic ) + 1000000000 );/##CHR(13)##//##CHR(10)##/ mName = STDF( STRTRAN( name, ";", " " ), 100 ) ;/##CHR(13)##//##CHR(10)##/ mCtext = STDF( STRTRAN( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mRDate = "''" + DTOC( DATE( ) ) + "''";/##CHR(13)##//##CHR(10)##/ mUnion_type = ЕСЛИ( union_type > 0, ALLTRIM( STR( union_type - 1 ) ), "null" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ folderID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT id FROM GrpActDisc WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( folderID != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE DiscRate/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ",/##CHR(13)##//##CHR(10)##/ ParentID = " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', /##CHR(13)##//##CHR(10)##/ Text = ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ DiscCollOper = " + mUnion_type + ", /##CHR(13)##//##CHR(10)##/ IsFolder = 1/##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( folderID ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ folderID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO DiscRate (ID, Code, ParentID, Name, Text, DiscCollOper, IsFolder )/##CHR(13)##//##CHR(10)##/ VALUES/##CHR(13)##//##CHR(10)##/ ( " + folderID + ", " + mCode +", " + parentID + ", ''" + mName + "'',/##CHR(13)##//##CHR(10)##/ ''" + mCtext + "'', " + mUnion_type + ", 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать группу условий./##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( condID ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE GrpActDisc SET Code = " + mCode + ", Name= ''" + mName + "'', Actv= 1 WHERE id = " + condID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO GrpActDisc ( ID, Code, Name, Actv )/##CHR(13)##//##CHR(10)##/ VALUES/##CHR(13)##//##CHR(10)##/ ( " + condID + ", " + mCode +", ''" + mName + "'', 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = STDF( ЗАМЕНИТЬ( name, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ЗАМЕНИТЬ( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = СЖАТЬПРОБЕЛЫ( value );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, СТРОКА( vtype - 1 ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = СТРОКА( union_type );/##CHR(13)##//##CHR(10)##/ mF_auto = ЕСЛИ( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = ЕСЛИ( !ПУСТО( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = ЕСЛИ( !ПУСТО( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ЗАМЕНИТЬ( value_min, ";", " " );/##CHR(13)##//##CHR(10)##/ mValue_max = ЗАМЕНИТЬ( value_max, ";", " " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( ВЫЧИСЛИТЬ( mValue ), 100 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( mValue, 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mValue_min = ЕСЛИ( ПУСТО( value_min ), "null", "''" + STDF( mValue_min ) + "''" );/##CHR(13)##//##CHR(10)##/ mValue_max = ЕСЛИ( ПУСТО( value_max ), "null", "''" + STDF( mValue_max ) + "''" );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( ПУСТО( vtype ), "null", mVtype );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discID ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE DiscRate/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", /##CHR(13)##//##CHR(10)##/ ParentID = " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', /##CHR(13)##//##CHR(10)##/ Text = ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ val = ''" + mDsc_value + "'', /##CHR(13)##//##CHR(10)##/ begVal = " + mValue_min + ",/##CHR(13)##//##CHR(10)##/ endVal = " + mValue_max + ", /##CHR(13)##//##CHR(10)##/ type = " + mVtype + ",/##CHR(13)##//##CHR(10)##/ destination= " + mType_ + ", /##CHR(13)##//##CHR(10)##/ Kind = " + mF_auto + ",/##CHR(13)##//##CHR(10)##/ DiscCollOper= " + mUnion_type + ", /##CHR(13)##//##CHR(10)##/ IsFolder = 0/##CHR(13)##//##CHR(10)##/ WHERE id = " + discID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO DiscRate (ID, Code, ParentID, Name, Text, val, begVal, endVal,/##CHR(13)##//##CHR(10)##/ type, destination, kind, DiscCollOper, IsFolder )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + discID + ", " + mCode +", " + parentID + ", ''" + mName + "'', ''" + mCtext + "'', ''" + mDsc_value + "'',/##CHR(13)##//##CHR(10)##/ " + mValue_min + ", " + mValue_max + ", " + mVtype + ", " + mType_ + ", " + mF_auto + ", " + mUnion_type + ", 0 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ),0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mName = STDF( ЗАМЕНИТЬ( name, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ЗАМЕНИТЬ( ctext, ";", " " ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, СТРОКА( vtype - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = value;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( ВЫЧИСЛИТЬ( mValue ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = STDF( mValue );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "null";/##CHR(13)##//##CHR(10)##/ mEnd_date = "null";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = ЕСЛИ( !ПУСТО( time_min ), time_min, "null" );/##CHR(13)##//##CHR(10)##/ mTime_max = ЕСЛИ( !ПУСТО( time_max ), time_max, "null" );/##CHR(13)##//##CHR(10)##/ mWday_min = ЕСЛИ( !ПУСТО( wday_min ) OR !ПУСТО( wday_max ), STR( wday_min - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mWday_max = ЕСЛИ( !ПУСТО( wday_min ) OR !ПУСТО( wday_max ), STR( wday_max - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mKolp_min = ЕСЛИ( !ПУСТО( kolp_min ) OR !ПУСТО( kolp_max ), STR( kolp_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mKolp_max = ЕСЛИ( !ПУСТО( kolp_min ) OR !ПУСТО( kolp_max ), STR( kolp_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mSumma_min = ЕСЛИ( !ПУСТО( summa_min ) OR !ПУСТО( summa_max ), STR( summa_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mSumma_max = ЕСЛИ( !ПУСТО( summa_min ) OR !ПУСТО( summa_max ), STR( summa_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = ЕСЛИ( !ПУСТО( csumma_min ) OR !ПУСТО( csumma_max ), STR( csumma_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = ЕСЛИ( !ПУСТО( csumma_min ) OR !ПУСТО( csumma_max ), STR( csumma_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = ЕСЛИ( !ПУСТО( prefix_min ) OR !ПУСТО( prefix_max ), prefix_min, "null" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = ЕСЛИ( !ПУСТО( prefix_min ) OR !ПУСТО( prefix_max ), prefix_max, "null" );/##CHR(13)##//##CHR(10)##/ mCena_min = ЕСЛИ( !ПУСТО( cena_min ) OR !ПУСТО( cena_max ), STR( cena_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCena_max = ЕСЛИ( !ПУСТО( cena_min ) OR !ПУСТО( cena_max ), STR( cena_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = ЕСЛИ( !ПУСТО( ckolp_min ) OR !ПУСТО( ckolp_max ), STR( ckolp_min, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = ЕСЛИ( !ПУСТО( ckolp_min ) OR !ПУСТО( ckolp_max ), STR( ckolp_max, 10, 4 ), "null" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "null";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "null";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "null";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "null";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "null";/##CHR(13)##//##CHR(10)##/ mCard_state = СТРОКА( card_state );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "null";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( mStart_date == "null" OR ПУСТО( mStart_date ), "null", "''" + mStart_date + "''" );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( mEnd_date == "null" OR ПУСТО( mEnd_date ), "null", "''" + mEnd_date + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mTime_min = ЕСЛИ( mTime_min == "null", "null", "''" + mTime_min + "''" );/##CHR(13)##//##CHR(10)##/ mTime_max = ЕСЛИ( mTime_max == "null", "null", "''" + mTime_max + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mPrefix_min = ЕСЛИ( mPrefix_min == "null", "null", "''" + STDF( mPrefix_min ) + "''" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = ЕСЛИ( mPrefix_max == "null", "null", "''" + STDF( mPrefix_max ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mBirthdaybeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthdayend = "null";/##CHR(13)##//##CHR(10)##/ mBirthmonthbeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthmonthend = "null";/##CHR(13)##//##CHR(10)##/ mBirthyearbeg = "null";/##CHR(13)##//##CHR(10)##/ mBirthyearend = "null";/##CHR(13)##//##CHR(10)##/ mBirthDateCond = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 AND ( birthday_min != 0 OR birthday_max != 0 ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthdaybeg = СТРОКА( -birthday_min );/##CHR(13)##//##CHR(10)##/ mBirthdayend = СТРОКА( birthday_max );/##CHR(13)##//##CHR(10)##/ mBirthmonthbeg = "0";/##CHR(13)##//##CHR(10)##/ mBirthmonthend = "0";/##CHR(13)##//##CHR(10)##/ mBirthyearbeg = "0";/##CHR(13)##//##CHR(10)##/ mBirthyearend = "99";/##CHR(13)##//##CHR(10)##/ mBirthDateCond = "4";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Необходимо определить GrpActDiscID - ID группы условий/##CHR(13)##//##CHR(10)##/ discID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ groupID = ЗАПРОС( "SELECT id FROM GrpActDisc WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если группы условий еще нет, то добавляем стандартную/##CHR(13)##//##CHR(10)##/ IF ( groupID == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ groupID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO GrpActDisc( ID, Code, Name, Actv, DependOtherPos ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + groupID + ", " + mParent + ", " + nName + ", 1, 1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Поле groupID не должно быть пустым/##CHR(13)##//##CHR(10)##/ IF ( groupID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проверяем наличие условия с нашим кодом. Если такое есть, то сначала удалем, потом добавляем новое/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT conditionID FROM ActDisc WHERE code = " + mCode, "conditionID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDisc WHERE code = " + mCode, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM Condition WHERE ID = " + condID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем новое условие/##CHR(13)##//##CHR(10)##/ // Сначала в таблицу Condition, чтобы получить ID нового условия/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Condition( ID, TimeBeg, TimeEnd, DateBeg, DateEnd, DayBeg, DayEnd,/##CHR(13)##//##CHR(10)##/ QuantityBeg, QuantityEnd, SummBeg, SummEnd, SummRecBeg,/##CHR(13)##//##CHR(10)##/ SummRecEnd, CardPrefixBeg, CardPrefixEnd, QuantityRecBeg,/##CHR(13)##//##CHR(10)##/ QuantityRecEnd, PriceBeg, PriceEnd, CardState, CardLenBeg,/##CHR(13)##//##CHR(10)##/ CardLenEnd, sex, BirthDayBeg, BirthDayEnd, BirthMonthBeg,/##CHR(13)##//##CHR(10)##/ BirthMonthEnd, BirthYearBeg, BirthYearEnd, BirthDateCond )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + condID + ",/##CHR(13)##//##CHR(10)##/ " + mTime_min + "," + mTime_max + ", " + mStart_date + ",/##CHR(13)##//##CHR(10)##/ " + mEnd_date + "," + mWday_min + ", " + mWday_max + ",/##CHR(13)##//##CHR(10)##/ " + mKolp_min + "," + mKolp_max + ", " + mSumma_min + ",/##CHR(13)##//##CHR(10)##/ " + mSumma_max + "," + mCsumma_min + ", " + mCsumma_max + ",/##CHR(13)##//##CHR(10)##/ " + mPrefix_min + "," + mPrefix_max + ", " + mCkolp_min + ",/##CHR(13)##//##CHR(10)##/ " + mCkolp_max + "," + mCena_min + ", " + mCena_max + ",/##CHR(13)##//##CHR(10)##/ " + mCard_state + "," + mCardlen_min + ", " + mCardlen_max + ", 0,/##CHR(13)##//##CHR(10)##/ " + mBirthdaybeg + "," + mBirthdayend + ", " + mBirthmonthbeg + ",/##CHR(13)##//##CHR(10)##/ " + mBirthmonthend + "," + mBirthyearbeg + ", " + mBirthyearend + ", " + mBirthDateCond +" ) ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь в таблицу заголовок ActDisc/##CHR(13)##//##CHR(10)##/ actID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDisc ( ID, Code, GrpActDiscID, Name, ConditionID, DiscrateID )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + actID + ", " + mCode + ", " + groupID + ", ''" + mName + "'',/##CHR(13)##//##CHR(10)##/ " + condID+ ", " + discID + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/grpCCardID = "null";/##CHR(13)##//##CHR(10)##/frontolCounterID = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для ODBC определяем /##CHR(13)##//##CHR(10)##/mainGRPCCardID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в константах системы есть запись под именем _КОДСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ, то ищем этот счетчик во Фронтоле/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ" ) != "I" AND ТИП( "_КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ" ) != "B" );/##CHR(13)##//##CHR(10)##/ _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ ) )/##CHR(13)##//##CHR(10)##/ frontolCounterID = ЗАПРОС( "SELECT ID FROM CounterType WHERE code= " + STR( _КОДВИДАСЧЕТЧИКАОБОРОТОВ_ФРОНТОЛ ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем список карт проходим по нему, добавляя необходимую информацию по фронтол/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКарт" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = ЕСЛИ( ПУСТО( card_type ), "1", card_type );/##CHR(13)##//##CHR(10)##/ mState = ЕСЛИ( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, STR( vtype - 1 ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = value;/##CHR(13)##//##CHR(10)##/ mCard_type = card_type;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = cardn; /##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( ПУСТО( str_date ), "null", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( ПУСТО( end_date ), "null", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если обороты по карте еще не расчитаны, то расчитываем/##CHR(13)##//##CHR(10)##/ IF ( !f_calculated )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Рассчитываем обороты и почещения текущей карты. Если с картой связана скидка, то возможно надо считать оборот за сколько-то дней/##CHR(13)##//##CHR(10)##/ client_trn_days = 0;/##CHR(13)##//##CHR(10)##/ client_qtv_days = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ client_trn_days = ЗАПРОС( "SELECT client_trn_days FROM specmdiscount WHERE code = ''" + discount + "''" );/##CHR(13)##//##CHR(10)##/ client_qtv_days = ЗАПРОС( "SELECT client_qtv_days FROM specmdiscount WHERE code = ''" + discount + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ saldo = ЗАПРОС( "SELECT dbo.fn_calccard_turnover( ''" + code + "'', '''', " + client_trn_days +" )" );/##CHR(13)##//##CHR(10)##/ counter = ЗАПРОС( "SELECT dbo.fn_calccard_counter( ''" + code + "'', '''', " + client_qtv_days +" )" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = СТРОКА( saldo, 16, 2 );/##CHR(13)##//##CHR(10)##/ mCardCounter = СТРОКА( counter );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // По типу карты определяем ИД ее типа/##CHR(13)##//##CHR(10)##/ // Если карта стандартного типа, то берем уже определенное значение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( card_type ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mainGRPCCardID == "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mainGRPCCardID = ЗАПРОС( "SELECT id FROM GrpCCard WHERE code= 1", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( mainGRPCCardID ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "В ККМ нет Вида дисконтных карт с кодом 1. " + CHR( 13 ) + "Выгрузка дисконтных карт прервана." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ grpCCardID = mainGRPCCardID;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Иначе определяем его/##CHR(13)##//##CHR(10)##/ grpCCardID = ЗАПРОС( "SELECT ID FROM GrpCCard WHERE code= " + STR( VAL( card_type ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( grpCCardID ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "В карте " + cardn + " указан Вид дисконтной карты " + card_type + "." + CHR( 13 ) + "В ККМ нет вида карт с таким кодом. " + CHR( 13 ) + "Выгрузка дисконтных карт прервана." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ grpCCardID = ЕСЛИ( ПУСТО( grpCCardID ), "null", СТРОКА( grpCCardID ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE code= " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ mCardn = "''" + STDF( cardn, 40 ) + "''";/##CHR(13)##//##CHR(10)##/ mStart_date = ЕСЛИ( ПУСТО( str_date ), "null", "''" + DTOC( str_date ) + "''" );/##CHR(13)##//##CHR(10)##/ mEnd_date = ЕСЛИ( ПУСТО( end_date ), "null", "''" + DTOC( end_date ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( cardID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE CCard/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", GrpCCardID = " + grpCCardID + ", Val= " + mCardn + ",/##CHR(13)##//##CHR(10)##/ ExpDateBeg = " + mStart_date + ", ExpDateEnd= " + mEnd_Date + ",/##CHR(13)##//##CHR(10)##/ state = " + mState + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + cardID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Обновляем оборот по карте/##CHR(13)##//##CHR(10)##/ // Если указан счетчик для оборотов карт, то добавляем запись в счетчики/##CHR(13)##//##CHR(10)##/ IF ( frontolCounterID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Определяем ИД счетчика оборотов карты/##CHR(13)##//##CHR(10)##/ turnoverID = ЗАПРОС( "SELECT id /##CHR(13)##//##CHR(10)##/ FROM Counterd/##CHR(13)##//##CHR(10)##/ INNER JOIN Counter ON Counterd.counterid = Counter.id/##CHR(13)##//##CHR(10)##/ INNER JOIN CCardCounter ON CCardCounter.counterid = Counter.id/##CHR(13)##//##CHR(10)##/ WHERE Counterd.DType = 1 AND CCardCounter.cardID = " + cardID + " AND /##CHR(13)##//##CHR(10)##/ Counter.CounterTypeID = " + frontolCounterID, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Counterd SET Delta= " + mSaldo + " WHERE id = " + turnoverID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO CCard( ID, Code, GrpCCardID, Val, ExpDateBeg, ExpDateEnd, State ) /##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + cardID + ",/##CHR(13)##//##CHR(10)##/ " + mCode + ", " + grpCCardID + ", " + mCardn + ",/##CHR(13)##//##CHR(10)##/ " + mStart_date + ", " + mEnd_date + ", " + mState + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если указан счетчик для оборотов карт, то добавляем запись в счетчики/##CHR(13)##//##CHR(10)##/ IF ( frontolCounterID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Создаем счетчик/##CHR(13)##//##CHR(10)##/ counterID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ counterCode = ЗАПРОС( "SELECT MAX( code ) AS code FROM Counter", "code", СОЕДИНЕНИЕФРОНТОЛ ) + 1;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Counter( ID, code, CounterTypeID )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + counterID + ",/##CHR(13)##//##CHR(10)##/ " + counterCode + ", " + frontolCounterID + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Связываем новый счетчик с картой/##CHR(13)##//##CHR(10)##/ cardCounterID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO CCardCounter( ID, CCardID, CounterID ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + cardCounterID + ", " + cardID + ", " + counterID + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем оборот/##CHR(13)##//##CHR(10)##/ turnoverID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Counterd( ID, CounterID, Delta, DType )/##CHR(13)##//##CHR(10)##/ VALUES (/##CHR(13)##//##CHR(10)##/ " + turnoverID + ", " + counterID + ", " + mCardSaldo + ", 1 ) ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE cardID = " + cardID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, CardID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, ClientID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + cardID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКарт" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( ABS( ic ) + 1000000000 );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ mName = STDF( name, 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDF( ctext, 100 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( clientID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Client/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", ParentID= " + parentID + ",/##CHR(13)##//##CHR(10)##/ Name = ''" + mName + "'', Text= ''" + mCtext + "'',/##CHR(13)##//##CHR(10)##/ IsFolder = 1/##CHR(13)##//##CHR(10)##/ WHERE id = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ clientID= ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Client (ID, Code, ParentID, Name, Text, IsFolder, RegDate, sex ) VALUES/##CHR(13)##//##CHR(10)##/ ( " + clientID + ", " + mCode +", " + parentID + ",''" + mName + "'',/##CHR(13)##//##CHR(10)##/ ''" + mCtext + "'', 1, ''" + DTOC( DATE( ) ) + "'', 0 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ) , "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE clientID = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + clientID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = СТРОКА( VAL( code ) );/##CHR(13)##//##CHR(10)##/ mParent = СТРОКА( ЕСЛИ( ПУСТО( parent ), 0, ABS( parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mSex = СТРОКА( sex );/##CHR(13)##//##CHR(10)##/ mZdate = "null";/##CHR(13)##//##CHR(10)##/ mRdate = "null";/##CHR(13)##//##CHR(10)##/ mIndex = "null";/##CHR(13)##//##CHR(10)##/ mCity = "null";/##CHR(13)##//##CHR(10)##/ mWeb = "null";/##CHR(13)##//##CHR(10)##/ mINN = "null";/##CHR(13)##//##CHR(10)##/ mDOC = "null";/##CHR(13)##//##CHR(10)##/ mOKPO = "null";/##CHR(13)##//##CHR(10)##/ mOKPD = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mVtype = ЕСЛИ( vtype > 0, STR( vtype - 1 ), "null" );/##CHR(13)##//##CHR(10)##/ mType_ = ЕСЛИ( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = "''" + STDF( name, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mCtext = "''" + STDF( ctext, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mNote = "''" + STDF( note, 100 ) + "''";/##CHR(13)##//##CHR(10)##/ mTelephon = "''" + STDF( telefon ) + "''";/##CHR(13)##//##CHR(10)##/ mAddress = "''" + STDF( address ) + "''";/##CHR(13)##//##CHR(10)##/ mEMail = "''" + STDF( email ) + "''";/##CHR(13)##//##CHR(10)##/ mBirthdate = ЕСЛИ( ПУСТО( birthdate ), "null", "''" + DTOC( birthdate ) + "''" );/##CHR(13)##//##CHR(10)##/ mRdate = "''" + DTOC( ДАТА( ) ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Если в поле ID установлено существущее значение, то надо обновить запись и не удалять ее/##CHR(13)##//##CHR(10)##/ IF ( clientID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE Client/##CHR(13)##//##CHR(10)##/ SET/##CHR(13)##//##CHR(10)##/ Code = " + mCode + ", ParentID = " + parentID + ", Name = " + mName + ",/##CHR(13)##//##CHR(10)##/ Text = " + mCtext + ", IsFolder = 0, Description = " + mNote + ",/##CHR(13)##//##CHR(10)##/ Sex = " + mSex + ", MemDate = " + mZdate + ", BirthDate = " + mBirthdate + ",/##CHR(13)##//##CHR(10)##/ RegDate = " + mRdate + ", ZipCode = " + mIndex + ", City = " + mCity + ",/##CHR(13)##//##CHR(10)##/ Address = " + mAddress + ", Email = " + mEMail + ", Web = " + mWEB + ",/##CHR(13)##//##CHR(10)##/ Telephone = " + mTelephon + ", INN = " + mINN + ",/##CHR(13)##//##CHR(10)##/ Document = " + mDOC + ", OKPO = " + mOKPO + ", OKPD = " + mOKPD + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + clientID, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ clientID= ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO Client( ID, Code, ParentID, Name, Text, IsFolder, Description, Sex,/##CHR(13)##//##CHR(10)##/ MemDate, BirthDate, RegDate, ZipCode, City, Address, Email, Web,/##CHR(13)##//##CHR(10)##/ Telephone, INN, Document, OKPO, OKPD ) VALUES (/##CHR(13)##//##CHR(10)##/ " + clientID + ",/##CHR(13)##//##CHR(10)##/ " + mCode + ", " + parentID + ", " + mName + ", " + mCtext + ", 0,/##CHR(13)##//##CHR(10)##/ " + mNote + ", " + mSex + ", " + mZdate + ", " + mBirthdate + ",/##CHR(13)##//##CHR(10)##/ " + mRdate + ", " + mIndex + "," + mCity + ", " + mAddress + ",/##CHR(13)##//##CHR(10)##/ " + mEMail + ", " + mWeb + "," + mTelephon + ", " + mINN + ", " + mDOC + ",/##CHR(13)##//##CHR(10)##/ " + mOKPO + ", " + mOKPD + ") ", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ) , "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE clientID = " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + clientID + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ ',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Перед загрузкой карт клиентов необходимо удалить имеющиеся связи/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT cln.code AS clientcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE Code= " + VAL( СписокКлиентов.clientCode ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ClientCard WHERE ClientID= " + clientID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code/##CHR(13)##//##CHR(10)##/ WHERE cln.code = ''" + СписокКлиентов.clientCode + "''", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE Code= " + VAL( СписокКартКлиентов.cardCode ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ClientCard ( ID, ClientID, CCardID ) VALUES (/##CHR(13)##//##CHR(10)##/ gen_id( gid, 1 ), " + STR( clientID ) + ", " + STR( cardID ) + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клиента, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = STR( RECNO( ) + 1 );/##CHR(13)##//##CHR(10)##/ mClient = ЕСЛИ( client_folder, СТРОКА( 1000000000 + clientfolder_ic ), ЕСЛИ( ПУСТО( client ), "", СТРОКА( VAL( client ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = ЕСЛИ( ПУСТО( card ), "", СТРОКА( VAL( card ) ) );/##CHR(13)##//##CHR(10)##/ mWare = ЕСЛИ( ware_folder, СТРОКА( 1000000000 + warefolder_ic ), maincode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь необходимо создать объект скидки и, если надо, ставку скидки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "ID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ clientID = -1;/##CHR(13)##//##CHR(10)##/ cardID = -1;/##CHR(13)##//##CHR(10)##/ tmcID = -1;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mClient ) )/##CHR(13)##//##CHR(10)##/ clientID = ЗАПРОС( "SELECT id FROM Client WHERE code = " + mClient , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mCard ) )/##CHR(13)##//##CHR(10)##/ cardID = ЗАПРОС( "SELECT id FROM CCard WHERE code = " + mCard , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mClient ) )/##CHR(13)##//##CHR(10)##/ tmcID = ЗАПРОС( "SELECT id FROM sprt WHERE code = " + mWare , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ clientID = ЕСЛИ( ПУСТО( clientID ) , "-1", clientID );/##CHR(13)##//##CHR(10)##/ cardID = ЕСЛИ( ПУСТО( cardID ) , "-1", cardID );/##CHR(13)##//##CHR(10)##/ tmcID = ЕСЛИ( ПУСТО( tmcID ) , "-1", tmcID );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, ClientID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ WareID, PaymentID, CardID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( gen_id( gid, 1 ), " + clientID + ", " + discountID + ", " + condID + ", /##CHR(13)##//##CHR(10)##/ " + tmcID + ", -1, " + cardID + ", -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',233.00000000,'//Создавать таблицу с товарами/##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM " + CHR( 34 ) + "USER" + CHR( 34 ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ profileID = ЗАПРОС( "SELECT id FROM profile WHERE code = " + profile, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( profileID > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ userID = ЗАПРОС( "SELECT id FROM " + CHR( 34 ) + "USER" + CHR( 34 ) + " WHERE code = " + VAL( code ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( userID == 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + CHR( 34 ) + "USER" + CHR( 34 ) + " (id, code, name, text, profileid, pswrd, card )/##CHR(13)##//##CHR(10)##/ VALUES( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + VAL( code ) + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( name, 100 ) + "'', ''" + STDF( chequetext, 100 )+"'', /##CHR(13)##//##CHR(10)##/ " + profileID + ", " + STDF( password ) + ", ''" + STDF( ex_code ) + "'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + CHR( 34 ) + "USER" + CHR( 34 ) + " (id, name, text, profileid, pswrd, card )/##CHR(13)##//##CHR(10)##/ VALUES( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), /##CHR(13)##//##CHR(10)##/ name= ''" + STDF( name, 100 ) + "'', text= ''" + STDF( chequetext, 100 )+"'', /##CHR(13)##//##CHR(10)##/ profileid= " + profileID + ", pswrd= " + STDF( password ) + ", card= ''" + STDF( ex_code ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + userID, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НАЧАЛОПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ НАЧАЛОПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОНЕЦПЕРИОДА ) )/##CHR(13)##//##CHR(10)##/ КОНЕЦПЕРИОДА = {01.01.2000};/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подсоединение к источнику ODBC для текущей ККМ/##CHR(13)##//##CHR(10)##/// Для ODBC соединения может быть указана строка подключения/##CHR(13)##//##CHR(10)##/PUBLIC СОЕДИНЕНИЕФРОНТОЛ;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( connectString ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "В карточке оборудования ''" + name + "'' необходимо указать строку подключения к базе данных Фронтол." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СОЕДИНЕНИЕФРОНТОЛ = ДОБАВИТЬСОЕДИНЕНИЕ( connectstring );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬСОЕДИНЕНИЕ( -1 );/##CHR(13)##//##CHR(10)##/// Если не удалось подключиться к базе Фронтол - выходим с ошибкой/##CHR(13)##//##CHR(10)##/IF ( СОЕДИНЕНИЕФРОНТОЛ < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось подключиться к источнику данных ''" + connectString + "'' для " + ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите. Чтение данных из ККМ ''" + name + "''." );/##CHR(13)##//##CHR(10)##/Условие = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 1 ) // Новые транзакции/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT tranzcount, tranztime, tranzdate /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt /##CHR(13)##//##CHR(10)##/ WHERE identity_column = ( SELECT MAX( identity_column )/##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' )", "ПоследняяТранзация", 1, -1 );/##CHR(13)##//##CHR(10)##/ ПоследняяТранзакция = ПоследняяТранзация.tranzcount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПоследняяТранзакцияФронтол = ЗАПРОС( "SELECT MAX(tranzCount) AS tranzcount FROM tranzt", "tranzcount", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ПоследняяТранзакцияФронтол >= ПоследняяТранзакция )/##CHR(13)##//##CHR(10)##/ Условие = "(t.tranzcount > " + ПоследняяТранзакция + ")";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Загрузка будет произведена с " + DTOC( ПоследняяТранзация.TranzDate ) + " " + /##CHR(13)##//##CHR(10)##/ RIGHT( TTOC( ПоследняяТранзация.TranzTime ), 8 ), "Внимание", 36 ) != 6 )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ Условие = "(t.tranzdate > ''" + DTOC( ПоследняяТранзация.TranzDate ) + "'' OR /##CHR(13)##//##CHR(10)##/ (t.tranzdate = ''" + DTOC( ПоследняяТранзация.TranzDate ) + "'' AND t.tranztime > ''" + RIGHT( TTOC( ПоследняяТранзация.TranzTime ), 8 ) + "'' ) )";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 2 ) // Указанный период/##CHR(13)##//##CHR(10)##/ Условие = "( t.tranzdate > ''" + DTOC( НАЧАЛОПЕРИОДА ) + "'' OR ( t.tranzdate = ''" + DTOC( НАЧАЛОПЕРИОДА ) + "'' AND t.tranztime > ''" + TTOC( НАЧАЛОПЕРИОДА, 8) + "'' ) ) AND /##CHR(13)##//##CHR(10)##/ ( t.tranzdate < ''" + DTOC( КОНЕЦПЕРИОДА ) + "'' OR ( t.tranzdate = ''" + DTOC( КОНЕЦПЕРИОДА ) + "'' AND t.tranztime < ''" + TTOC( КОНЕЦПЕРИОДА, 8 ) + "'' ) ) ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 3 ) // По номерам смен/##CHR(13)##//##CHR(10)##/ Условие = "( d.ecrsession >= " + ПЕРВАЯСМЕНА + " AND d.ecrsession <= " + ПОСЛЕДНЯЯСМЕНА + " )";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 4 ) // Все транзакции/##CHR(13)##//##CHR(10)##/ Условие = "( 1 = 1 )";/##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 5 ) // Последняя смена/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вычисляем максимальный номер кассовой смены/##CHR(13)##//##CHR(10)##/ НомерСмены = ЗАПРОС( "SELECT d.ecrsession/##CHR(13)##//##CHR(10)##/ FROM document d /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN tranzt t ON d.id = t.documentid/##CHR(13)##//##CHR(10)##/ WHERE t.tranztype = 61 OR t.tranztype = 63/##CHR(13)##//##CHR(10)##/ ORDER BY t.tranzdate DESC, t.tranztime DESC", "ecrsession", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Условие = "( d.ecrsession = " + НомерСмены + " )";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Достаем данные из базы данных фронтола/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT d.id, /##CHR(13)##//##CHR(10)##/ COALESCE(t.tranzCount,0) AS tranzcount, t.tranzdate, CAST( t.tranztime AS char(20) ) AS tranztime, t.tranzhour, t.tranztype,/##CHR(13)##//##CHR(10)##/ 0 AS posnumber, d.chequenumber, t.seller, t.warecode, t.waremark, t.barcode, t.factor,/##CHR(13)##//##CHR(10)##/ t.aspectscheme, t.aspectvalue1, t.aspectvalue2, t.aspectvalue3, t.aspectvalue4, t.aspectvalue5,/##CHR(13)##//##CHR(10)##/ t.price, t.quantity, t.summ, t.pricewd, t.summwd, d.chequetype, 0 AS isret, d.ecrsession,/##CHR(13)##//##CHR(10)##/ t.info, t.infostr, t.currency, 0 AS tranzcountref, 0 AS prnonecr, PrintGroupClose AS ecrnumber, t.posid,/##CHR(13)##//##CHR(10)##/ t.posnumb, d.education, t.summdiscpos, t.summdiscrec, t.commentcode, k.code AS DockIndCode,/##CHR(13)##//##CHR(10)##/ 0 AS restored, d.saved, t.countfills, t.countprints, t.orderpos, d.id AS documentID,/##CHR(13)##//##CHR(10)##/ d.aspectscheme AS document_aschem, d.aspectvalue1 AS document_avalue1,/##CHR(13)##//##CHR(10)##/ d.aspectvalue2 AS document_avalue2, d.aspectvalue3 AS document_avalue3,/##CHR(13)##//##CHR(10)##/ d.aspectvalue4 AS document_avalue4, d.aspectvalue5 AS document_avalue5,/##CHR(13)##//##CHR(10)##/ d.state AS document_state, d.isfiscal AS document_isfiscal, c.code AS document_client,/##CHR(13)##//##CHR(10)##/ CAST( d.employeecode AS char(10) ) AS manager, CAST( t.ExciseStamp AS varchar( 150 ) ) AS ExciseStamp/##CHR(13)##//##CHR(10)##/ FROM document d /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN tranzt t ON d.id = t.documentid/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN DocKind k ON d.DocKindID = k.ID/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN client c ON d.clientid = c.id /##CHR(13)##//##CHR(10)##/ WHERE " + Условие + " ORDER BY t.tranzCount", "ТранзакцииФронтол", "Пожалуйста, подождите. Чтение данных из ККМ", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Заканчиваем соединение с Фронтол/##CHR(13)##//##CHR(10)##/РАЗОРВАТЬСОЕДИНЕНИЕ( СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КОЛИЧЕСТВОСТРОК( "ТранзакцииФронтол" ) );/##CHR(13)##//##CHR(10)##/СтрокОбработано = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "ТранзакцииФронтол" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокОбработано++;/##CHR(13)##//##CHR(10)##/ if ( СтрокОбработано % 10 == 0 ) ИНДИКАТОР( СтрокОбработано, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = ТранзакцииФронтол.tranzcount;/##CHR(13)##//##CHR(10)##/ tranzDate = DTOC( ТранзакцииФронтол.tranzdate );/##CHR(13)##//##CHR(10)##/ tranzTime = LEFT( ТранзакцииФронтол.tranztime, 8 );/##CHR(13)##//##CHR(10)##/ tranzType = ТранзакцииФронтол.tranztype;/##CHR(13)##//##CHR(10)##/ POSNumber = ТранзакцииФронтол.posnumber;/##CHR(13)##//##CHR(10)##/ chequeNumber = ТранзакцииФронтол.chequenumber;/##CHR(13)##//##CHR(10)##/ Seller = ТранзакцииФронтол.seller;/##CHR(13)##//##CHR(10)##/ wareCode = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ КодОплаты = ТранзакцииФронтол.info;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mAspectValue1 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue1 ), СТРОКА( ТранзакцииФронтол.aspectValue1 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue2 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue2 ), СТРОКА( ТранзакцииФронтол.aspectValue2 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue3 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue3 ), СТРОКА( ТранзакцииФронтол.aspectValue3 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue4 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue4 ), СТРОКА( ТранзакцииФронтол.aspectValue4 ), "" );/##CHR(13)##//##CHR(10)##/ mAspectValue5 = ЕСЛИ( !ПУСТО( ТранзакцииФронтол.aspectValue5 ), СТРОКА( ТранзакцииФронтол.aspectValue5 ), "" );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mAspectValue1 ) OR !ПУСТО( mAspectValue2 ) OR !ПУСТО( mAspectValue3 ) OR !ПУСТО( mAspectValue4 ) OR !ПУСТО( mAspectValue5 ) )/##CHR(13)##//##CHR(10)##/ AspectsList = mAspectValue1 + "," + mAspectValue2 + "," + mAspectValue3 + "," + mAspectValue4 + "," + mAspectValue5;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Price = ТранзакцииФронтол.price;/##CHR(13)##//##CHR(10)##/ Quantity = ТранзакцииФронтол.quantity;/##CHR(13)##//##CHR(10)##/ chequeType = ТранзакцииФронтол.chequetype;/##CHR(13)##//##CHR(10)##/ ecrSession = ТранзакцииФронтол.ecrsession;/##CHR(13)##//##CHR(10)##/ PriceWD = ТранзакцииФронтол.pricewd;/##CHR(13)##//##CHR(10)##/ SummWD = ТранзакцииФронтол.summwd;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ТранзакцииФронтол.ecrnumber;/##CHR(13)##//##CHR(10)##/ wareMark = ТранзакцииФронтол.waremark;/##CHR(13)##//##CHR(10)##/ exmark = ТранзакцииФронтол.ExciseStamp;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ТранзакцииФронтол.barcode );/##CHR(13)##//##CHR(10)##/ Summ = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ currency = ТранзакцииФронтол.currency;/##CHR(13)##//##CHR(10)##/ education = ТранзакцииФронтол.education;/##CHR(13)##//##CHR(10)##/ dockIndCode = ТранзакцииФронтол.DockIndCode;/##CHR(13)##//##CHR(10)##/ commentCode = ТранзакцииФронтол.commentcode;/##CHR(13)##//##CHR(10)##/ universalNDOK = ТранзакцииФронтол.documentID;/##CHR(13)##//##CHR(10)##/ karta = ТранзакцииФронтол.infostr;/##CHR(13)##//##CHR(10)##/ documentClient = ТранзакцииФронтол.document_client;/##CHR(13)##//##CHR(10)##/ manager = ТранзакцииФронтол.manager;/##CHR(13)##//##CHR(10)##/ warecode_org = ТранзакцииФронтол.warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranztype, 40, 41, 43 ) )/##CHR(13)##//##CHR(10)##/ mAspectValue1 = СТРОКА( КодОплаты );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = Quantity ;/##CHR(13)##//##CHR(10)##/ summasale = SummWD;/##CHR(13)##//##CHR(10)##/ summa = Summ;/##CHR(13)##//##CHR(10)##/ cena = Price;/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == 61 AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == 63 AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + ecrSession );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + ecrSession + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == 55 AND documentClient <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + documentClient );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + chequeNumber );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == 56 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + chequeNumber ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == 43 AND КодОплаты <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = ТранзакцииФронтол.summ;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + chequeNumber + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranzType, 1, 11, 2, 12 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> 6 AND chequeType <> 14 AND chequeType <> 15 AND chequeType <> 16, "008", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ2 ) == dockIndCode, "007", ЕСЛИ( VAL( КОДФРОНТ3 ) == dockIndCode, "001", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ4 ) == dockIndCode, "002", ЕСЛИ( VAL( КОДФРОНТ5 ) == dockIndCode, "003", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( VAL( КОДФРОНТ6 ) == dockIndCode, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == 14 OR chequeType == 15, "019", "008" )))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = ЕСЛИ( !ПУСТО( mAspectValue1 ) AND mAspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = ЕСЛИ( !ПУСТО( mAspectValue2 ) AND mAspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = ЕСЛИ( !ПУСТО( mAspectValue3 ) AND mAspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = ЕСЛИ( !ПУСТО( mAspectValue4 ) AND mAspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = ЕСЛИ( !ПУСТО( mAspectValue5 ) AND mAspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + mAspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ТОВАРИНФО.cat == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ТОВАРИНФО.cat == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), СТРОКА( ТОВАРИНФО.weight, 10, 3 ) + " " + ТОВАРИНФО.ed_weight, "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), СТРОКА( ТОВАРИНФО.d_litr, 10, 3 ) + " " + ТОВАРИНФО.edd_litr , "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( !ПУСТО( ТОВАРИНФО.name ), ТОВАРИНФО.name + ЕСЛИ( !ПУСТО( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( !ПУСТО( ТОВАРИНФО.name ), ТОВАРИНФО.name, nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, mAspectValue1, IIF( f_num == 2, mAspectValue2, IIF( f_num == 3, mAspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, mAspectValue4, IIF( f_num == 5, mAspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + tranzCount + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + posNumber + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + ecrSession + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + СТРОКА( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + ecrSession + ", " + СТРОКА( summasale, 16, 3 ) + ", " + СТРОКА( summabn, 16 ,3 ) + ", " + СТРОКА( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + СТРОКА( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', ''" + mAspectValue1 + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТранзакцииФронтол" ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТранзакцииФронтол" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) СООБЩЕНИЕ( "В данных не обнаружены транзакции по ФР, указанным в карточке ТО.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/ErrorMessage = "Ошибка товара в ККМ " + name + ". ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОбъемВес = "";/##CHR(13)##//##CHR(10)##/Алкоголь = false;/##CHR(13)##//##CHR(10)##/mAlco = false;/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/mNNVid = "";/##CHR(13)##//##CHR(10)##/mVolume = "0.00";/##CHR(13)##//##CHR(10)##/mAProc = "0.00";/##CHR(13)##//##CHR(10)##/IF ( ДобавлятьКНаименованиюОбъемВес OR ВыгружатьПризнакАлкоголя )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ ОбъемВес = " " + СЖАТЬПРОБЕЛЫ( ТоварИнфо.volweight );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM sprres_g WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCode = code;/##CHR(13)##//##CHR(10)##/mBarcode = barcode;/##CHR(13)##//##CHR(10)##/mName = name + ОбъемВес;/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "null" );/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0,"''" + ALLTRIM( DTOC( store_period + DATE( ) ) )+"''", "null" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = STDF( article, 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDF( note, 1024 );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##///Проверяем не сигареты ли это /##CHR(13)##//##CHR(10)##/mSmoke = IIF (mKkm_section == "4",2048,0);/##CHR(13)##//##CHR(10)##/mFlags = ALLTRIM( STR( ЕСЛИ( fractqty OR waretype == 0, 1, 0 ) + ЕСЛИ( enterqty, 0, 16 ) + 110 + mSmoke + ЕСЛИ( enterqty, 128, 0 ) ) );/##CHR(13)##//##CHR(10)##///mFlags = ALLTRIM( STR( ЕСЛИ( fractqty OR waretype == 0, 1, 0 ) + ЕСЛИ( enterqty, 0, 16 ) + 110 + ЕСЛИ( enterqty, 128, 0 ) + ЕСЛИ( Алкоголь, 16384, 0 ) ) );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "null", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ЕСЛИ( kkm_weight AND !EMPTY( plu ), ALLTRIM( plu ), "null" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = ВЫЧИСЛИТЬ( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = ЗАПРОС("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// При выгрузке модификаоров определяем признак визуального выбора/##CHR(13)##//##CHR(10)##/ВизуальныйВыбор = 0;/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬМОДИФИКАТОРЫ )/##CHR(13)##//##CHR(10)##/ ВизуальныйВыбор = ЗАПРОС("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДТовара = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + STR( VAL( code ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если товар уже есть в базе данных и не надо сохранять остатки, то/##CHR(13)##//##CHR(10)##/// удаляем текущий товар и связанные с ним штрих коды/##CHR(13)##//##CHR(10)##/IF ( ИДТовара > 0 AND saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM analog WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM barcode WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM sprt WHERE code= " + STR( VAL( code ) ), "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если разрез/##CHR(13)##//##CHR(10)##/ИДСхемы = 0;/##CHR(13)##//##CHR(10)##/mAspectType = STR( aspectType );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ищем ID схемы разрезов/##CHR(13)##//##CHR(10)##/IF ( f_hchild AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДСхемы = STR( ЗАПРОС( "SELECT id FROM aspschm WHERE code= " + VAL( nngroup ), "id", СОЕДИНЕНИЕФРОНТОЛ ) );/##CHR(13)##//##CHR(10)##/ mAspectType = ЕСЛИ( saldotype > 0, "2", "1" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДПапки = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + mParent, "id", СОЕДИНЕНИЕФРОНТОЛ ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Определяем ID устройства весов. По утверждению АТОЛ всегда должен быть 0/##CHR(13)##//##CHR(10)##/ИДВесов = 0;/##CHR(13)##//##CHR(10)##/// Код налоговой группы во Фронтоле/##CHR(13)##//##CHR(10)##/ИДНалогов = 0;/##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/ ИДНалогов = ЗАПРОС( "SELECT id FROM taxgroup WHERE code =" + VAL( mKodn ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/// Коды групп печати /##CHR(13)##//##CHR(10)##/ИДГруппыЧека = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( mFr_code ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыКопии = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintCopy ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыСчета = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintInvoice ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ИДГруппыМарки = ЗАПРОС( "SELECT id FROM PrintGroup WHERE code = " + VAL( kodGrPintMark ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/// Признак необходимости грузить весы через фронтол/##CHR(13)##//##CHR(10)##/mWeightFlag = ЕСЛИ( kkm_weight, "1", "0" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ИДТовара == 0 OR ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДТовара == 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "ИДТовара == 0" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprt (id, aspectschemeid, aspecttype, code, mark, name, parentid, text, isware, flags, /##CHR(13)##//##CHR(10)##/ scalelpdevid, scalelpwarecode, scalelploaded, taxgroupid, minprice, /##CHR(13)##//##CHR(10)##/ maxdiscount, description, rewardtype, rewardval, life, ecrdepartment, printgroupclose, /##CHR(13)##//##CHR(10)##/ printgroupcopy, printgroupprecheque, printgroupstamp, VisualSelect, alcovolume, alcotypecode, /##CHR(13)##//##CHR(10)##/ isalco, withexcisestamp, alcocontent ) VALUES/##CHR(13)##//##CHR(10)##/ (" + ИДТовара + ", " + ИДСхемы + ", " + mAspectType + ", /##CHR(13)##//##CHR(10)##/ " + mCode + ", ''" + STDF( mArticle ) + "'', ''" + STDF( mName ) + "'', " + ИДПапки + ",/##CHR(13)##//##CHR(10)##/ ''" + STDF( mCname ) + "'', 1, " + mFlags + ", " + ИДВесов + ",/##CHR(13)##//##CHR(10)##/ " + mPLU + ", " + mWeightFlag + ", " + ИДНалогов + ", /##CHR(13)##//##CHR(10)##/ " + mMin_cena + ", " + mActionPriz + ", ''" + STDF( mNote ) + "'', 0, 0, " + mStore_period + ",/##CHR(13)##//##CHR(10)##/ " + mKkm_section + ", " + ИДГруппыЧека + ", " + ИДГруппыКопии + ", " + ИДГруппыСчета + ", /##CHR(13)##//##CHR(10)##/ " + ИДГруппыМарки + ", " + ВизуальныйВыбор + ", " + mVolume + ", ''" + STDF( mNNVid ) + "'',/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( mAlco, "1", "0" ) + ", " + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ", " + mAProc + " )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprt SET/##CHR(13)##//##CHR(10)##/ aspectschemeid = " + ИДСхемы + ",/##CHR(13)##//##CHR(10)##/ aspecttype = " + mAspectType + ",/##CHR(13)##//##CHR(10)##/ code = " + mCode + ",/##CHR(13)##//##CHR(10)##/ mark = ''" + STDF( mArticle ) + "'',/##CHR(13)##//##CHR(10)##/ name = ''" + STDF( mName ) + "'',/##CHR(13)##//##CHR(10)##/ parentid = " + ИДПапки + ",/##CHR(13)##//##CHR(10)##/ text = ''" + STDF( mCname ) + "'',/##CHR(13)##//##CHR(10)##/ isware = 1,/##CHR(13)##//##CHR(10)##/ flags = " + mFlags + ",/##CHR(13)##//##CHR(10)##/ scalelpdevid = 0,/##CHR(13)##//##CHR(10)##/ scalelpwarecode = " + mPLU + ",/##CHR(13)##//##CHR(10)##/ scalelploaded = " + mWeightFlag + ",/##CHR(13)##//##CHR(10)##/ rewardtype = 0,/##CHR(13)##//##CHR(10)##/ rewardval = 0,/##CHR(13)##//##CHR(10)##/ taxgroupid = " + ИДНалогов + ",/##CHR(13)##//##CHR(10)##/ minprice = " + mMin_cena + ",/##CHR(13)##//##CHR(10)##/ description = ''" + STDF( mNote ) + "'',/##CHR(13)##//##CHR(10)##/ life = " + mStore_period + ",/##CHR(13)##//##CHR(10)##/ ecrdepartment = " + mKkm_section + ",/##CHR(13)##//##CHR(10)##/ maxdiscount = " + mActionPriz + ",/##CHR(13)##//##CHR(10)##/ printgroupclose = " + ИДГруппыЧека + ",/##CHR(13)##//##CHR(10)##/ printgroupcopy = " + ИДГруппыКопии + ",/##CHR(13)##//##CHR(10)##/ printgroupstamp = " + ИДГруппыМарки + ",/##CHR(13)##//##CHR(10)##/ printgroupprecheque= " + ИДГруппыСчета + ",/##CHR(13)##//##CHR(10)##/ VisualSelect = " + ВизуальныйВыбор + ",/##CHR(13)##//##CHR(10)##/ alcovolume = " + mVolume + ",/##CHR(13)##//##CHR(10)##/ alcotypecode = ''" + STDF( mNNVid ) + "'',/##CHR(13)##//##CHR(10)##/ isalco = " + ЕСЛИ( mAlco, "1", "0" ) + ",/##CHR(13)##//##CHR(10)##/ withexcisestamp = " + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ",/##CHR(13)##//##CHR(10)##/ alcocontent = " + mAProc + "/##CHR(13)##//##CHR(10)##/ WHERE id = " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ //Сообщение( "Выгрузка товара " + ИДТовара );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если необходимо добавить остаток товара - добавляем/##CHR(13)##//##CHR(10)##/ИДОстатка = ЗАПРОС( "SELECT id FROM remain WHERE wareid= " + ИДТовара , "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/IF ( ИДОстатка == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДОстатка = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДОстатка == 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "ИДОстатка == 0" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remain ( id, wareid ) VALUES (" + ИДОстатка + ", " + ИДТовара + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( saldotype > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДНачальногоОстатка = 0;/##CHR(13)##//##CHR(10)##/ // Если строка с остатком уже есть, то достаем ИД изменения остатка (продажи)/##CHR(13)##//##CHR(10)##/ IF ( saldotype == 1 AND !ПУСТО( ИДОстатка ) )/##CHR(13)##//##CHR(10)##/ ИДНачальногоОстатка = ЗАПРОС( "SELECT id FROM remaind WHERE remainid= " + ИДОстатка + " AND dtype= 1", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Удаляем старый остаток вместе с продажами и добавляем новый/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remain WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remaind WHERE remainid = " + ИДОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Либо добавляем, либо изменяем начальное количество/##CHR(13)##//##CHR(10)##/ IF ( ИДНачальногоОстатка != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM remaind WHERE id= " + ИДНачальногоОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем изменение количества/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remaind ( id, remainid, delta, dtype ) VALUES ( gen_id(gid,1)," + ИДОстатка + ", " + STR( -VAL( mTmcSaldo ), 10, 3 ) + ", 1)", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Теперь добавляем цену/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM pricedata WHERE remainid= " + ИДОстатка, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO pricedata ( id, remainid, price, actdatetime ) VALUES ( gen_id(gid,1)," + ИДОстатка + ", " + mCena + ", ''30.12.1899'')", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем разрезы товара/##CHR(13)##//##CHR(10)##/value1_id = 0;/##CHR(13)##//##CHR(10)##/value2_id = 0;/##CHR(13)##//##CHR(10)##/value3_id = 0;/##CHR(13)##//##CHR(10)##/value4_id = 0;/##CHR(13)##//##CHR(10)##/value5_id = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ parentCode = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + subcode + "''" );/##CHR(13)##//##CHR(10)##/ parentID = ЗАПРОС( "SELECT id FROM sprt WHERE code= " + parentCode, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если родительский товар есть в базе фронтола, то выгружаем разрезы/##CHR(13)##//##CHR(10)##/ IF ( parentID != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДСхемы = ЗАПРОС( "SELECT id FROM aspschm WHERE code= " + STR( VAL( nngroup ) ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДРазреза = ЗАПРОС( "SELECT id FROM aspect WHERE aspectschemeid= " + aspectValue + " AND code= " + СписокРазрезов.f_num, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ aspectValue = ЕСЛИ( aspectValue == "0", "999999999", aspectValue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ value_id = ЗАПРОС( "SELECT id FROM aspvalue WHERE aspectschemeid= " + ИДСхемы + " AND /##CHR(13)##//##CHR(10)##/ aspectid= " + ИДРазреза + " AND code= " + aspectValue, "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( counter == 1 )/##CHR(13)##//##CHR(10)##/ value1_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 2 )/##CHR(13)##//##CHR(10)##/ value2_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 3 )/##CHR(13)##//##CHR(10)##/ value3_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 4 )/##CHR(13)##//##CHR(10)##/ value4_id = value_id;/##CHR(13)##//##CHR(10)##/ ELSE IF ( counter == 5 )/##CHR(13)##//##CHR(10)##/ value5_id = value_id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" ); // Вычисляем ИД разрезов для добавления в таблицу remain/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO remain (id, wareid, aspectvalue1id, aspectvalue2id, aspectvalue3id, /##CHR(13)##//##CHR(10)##/ aspectvalue4id, aspectvalue5id, price ) VALUES ( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + parentID + ", " + value1_id + ", /##CHR(13)##//##CHR(10)##/ " + value2_id + ", " + value3_id + ", " + value4_id + ", /##CHR(13)##//##CHR(10)##/ " + value5_id + ", " + STR( cena, 8, 2) + ")", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Необходимо добавить соответствующее количество записей в barcode/##CHR(13)##//##CHR(10)##/// Перед добавлением необходимо очистить таблицу со штриховыми кодами/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DELETE FROM barcode WHERE wareid= " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь можно добавлять/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE barcode <> '''' AND code= ''" + mCode + "''", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДШК = ЗАПРОС( "SELECT id FROM barcode WHERE wareid = " + ИДТовара + " AND barcode = ''" + STDF( barcode, 30 ) + "''", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( ИДШК == 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO barcode ( id, wareid, barcode, factor, aspectvalue1id, aspectvalue2id, /##CHR(13)##//##CHR(10)##/ aspectvalue3id, aspectvalue4id, aspectvalue5id ) VALUES ( /##CHR(13)##//##CHR(10)##/ gen_id(gid,1), " + ИДТовара + ", ''" + STDF( barcode, 30 ) + "'', " + STR( koef, 16, 3 ) + ", " + value1_id + ",/##CHR(13)##//##CHR(10)##/ " + value2_id + ", " + value3_id + ", " + value4_id + ", " + value5_id + ")", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем имеющийся объект скидки, содержащий данный товар/##CHR(13)##//##CHR(10)##/// Затем добавляем новый объект скидки, содержащий только этот товар/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ discountID = ЗАПРОС( "SELECT id FROM DiscRate WHERE code = " + VAL( discount ), "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( discountID != 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ condID = ЗАПРОС( "SELECT GrpActDiscID FROM ActDisc WHERE code = " + VAL( discount ), "GrpActDiscID", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ IF ( condID == 0 )/##CHR(13)##//##CHR(10)##/ condID = "null";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ discountID = "null";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM ActDiscObj WHERE WareID = " + ИДТовара, "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ objID = ЗАПРОС( "SELECT gen_id( gid, 1 ) AS id FROM RDB$DATABASE", "id", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO ActDiscObj ( ID, WareID, DiscrateID, GrpActDiscID,/##CHR(13)##//##CHR(10)##/ CardID, PaymentID, ClientID, CCardClassifierID,/##CHR(13)##//##CHR(10)##/ ClientClassifierID, WareClassifierID, HallID,/##CHR(13)##//##CHR(10)##/ HallPlaceID )/##CHR(13)##//##CHR(10)##/ VALUES ( " + objID + ", " + ИДТовара + ", " + discountID + ", " + condID + ",/##CHR(13)##//##CHR(10)##/ -1, -1, -1, -1, -1, -1, -1, -1 )", "", СОЕДИНЕНИЕФРОНТОЛ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERRORCODE < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ErrorMessage + _ERRORDESCRIPTION );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:19') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (ODBC/ЕГАИС)','ККМ',0.00000000,'',0.00000000,53.00000000,0,'',0.00000000,'','',0,'AE7F946D-49B7-4CB5-81CD-880DE22A531B',0,1,0,'26.12.2018 15:36:19') #begin #description Обмен данными с Фронтол. WIN32 V2 (вскрытие тары) #name Обмен данными с Фронтол. WIN32 V2 (вскрытие тары) #code 0000000072 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), "4", ЕСЛИ( СписокНалогов.ntype == "05", "2", ЕСЛИ( СписокНалогов.ntype == "06", "3", ЕСЛИ( СписокНалогов.ntype == "07", "1", "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + ALLTRIM( valuecode ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА, сторно и модификаторы/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "30" OR tranzType == "31" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> ''18'', "008", /##CHR(13)##//##CHR(10)##/ IIF( VAL( dockIndCode ) == 18, "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ // Если был прочитан ШК, то ищем ЕД для этого ШК и пересчитываем количество/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) AND !ПУСТО( barcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ed, koef, koef_c FROM sprres_ed WHERE code = ''" + nn + "'' AND barcode = ''" + STDF( barcode ) + "''", "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "ЕдиницаИнфо" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ed = ЕдиницаИнфо.ed;/##CHR(13)##//##CHR(10)##/ cena = cena / ЕдиницаИнфо.koef_c;/##CHR(13)##//##CHR(10)##/ kolp = kolp / ЕдиницаИнфо.koef;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT dbo.fn_fullnnname( nn ) AS name, nnvid, d_litr, a_proc, ed/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', /##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',/##CHR(13)##//##CHR(10)##/ CASE ''" + cat + "'' WHEN ''001'' THEN ''S02'' WHEN ''002'' THEN ''S05'' ELSE '''' END, ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco AND !РазливнойАлко, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + mBarcode + ";" + STDE( "ВТ " + mName, 100 ) + ";" + STDE( "ВТ " + mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";Для вскрытия тары;" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',211.00000000,'',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''" + code + "'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала группы/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/IF ( КОДДОКУМЕНТА == "054" OR ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/} // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/// Внутренние автоматические скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИАВТОСКИДОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Объекты скидок/##CHR(13)##//##CHR(10)##/// Если выгружаем схемы скидок, то всегда удаляем все объекты скидок/##CHR(13)##//##CHR(10)##/// Это связано с тем, что необходима внутренняя кодировка во Фронтоле,/##CHR(13)##//##CHR(10)##/// которой у нас нет. Не имея возможности определить нужный код необходимо /##CHR(13)##//##CHR(10)##/// все очистить и добавить заново/##CHR(13)##//##CHR(10)##/IF ( ( ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСТАВОК ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLDISCRATES" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/ mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/ mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/ mValue_min + ";" + mVmax_exists + ";" + mValue_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mBirthday_min = "";/##CHR(13)##//##CHR(10)##/ mBirthday_max = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mBirthday_min = STR( -birthday_min ) + ",0,0";/##CHR(13)##//##CHR(10)##/ mBirthday_max = STR( birthday_max ) + ",0,99";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode + ";;;;;;;;;;;;;;;;;;;4;"+/##CHR(13)##//##CHR(10)##/ mBirthday_min + ";" + mBirthday_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_ /##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления объектов скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCOBJECTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Объект скидки - это совокупность товара, клинта, карты и условия применения/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( RECNO( ) + 1 ) );/##CHR(13)##//##CHR(10)##/ mClient = IIF( client_folder, ALLTRIM( STR( 1000000000 + clientfolder_ic ) ), IIF( EMPTY( client ), "", ALLTRIM( STR( VAL( client ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mCard = IIF( EMPTY( card ), "", ALLTRIM( STR( VAL( card ) ) ) );/##CHR(13)##//##CHR(10)##/ mWare = IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) ) ;/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), ",", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mDiscount = discount;/##CHR(13)##//##CHR(10)##/ mCondition = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_condition )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Код группы условий - это код папки (dsc_parent + 1000000000)/##CHR(13)##//##CHR(10)##/ mCondition = ALLTRIM( STR( ABS( dsc_parent ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mDiscount = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mClient + ";;" + mCard + ";;;" + mWare + ";" + mAspectList + ";;;;" + mDiscount + ";;" + mCondition;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 15:36:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол. WIN32 V2 (вскрытие тары)','ККМ',0.00000000,'',0.00000000,107.00000000,0,'',0.00000000,'','',0,'50F31B73-A319-465D-9984-859252AE4BF2',0,1,0,'26.12.2018 15:36:31') #begin #description Обмен данными с Фронтол Tablet PC #name Обмен данными с Фронтол Tablet PC #code 0000000046 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", "008" )))))))) );/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) );/##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STRTRAN( STR( cena, 8, 2 ), ".", delimiter ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STRTRAN( STR( min_cena, 8, 2 ), ".", delimiter ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STRTRAN( STR( kolp, 10, 3 ), ".", delimiter ) );/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/mEdn = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !_ВЫГРУЖАТЬАЛКОГОЛЬ )/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";;;0;;" + mEdn + ";" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, REPLICATE( ";", 30 ) + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//* TabletPC не совсем корректно работает с этой командой. Если товара нет, то прерывает загрузку/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'12.10.2016 13:32:59') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол Tablet PC','ККМ',0.00000000,'',0.00000000,198.00000000,0,'',0.00000000,'','',0,'8EBC8C96-F2BE-490F-A697-A5EA9D14C0C2',0,1,0,'12.10.2016 13:32:59') #begin #description Весы с ПЭ (драйвер АТОЛ версия 8) #name Весы с ПЭ (драйвер АТОЛ версия 8) #code 0000000074 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE;/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.LP8", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE( "driverSCALE" ) <> "O" )/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverSCALE.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/ driverSCALE.currentDeviceNumber= НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( товары )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) driverSCALE.Clear( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) RETURN true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВПЭВСЕГДАВЫГРУЖАТЬСРОКГОДНОСТИИЗПОСЛЕДНЕГОПРИХОДА" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВПЭВСЕГДАВЫГРУЖАТЬСРОКГОДНОСТИИЗПОСЛЕДНЕГОПРИХОДА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Устанавливаем поля драйвера/##CHR(13)##//##CHR(10)##/driverSCALE.PLU = ПЛУ;/##CHR(13)##//##CHR(10)##/driverSCALE.ICode = VAL( КОД );/##CHR(13)##//##CHR(10)##/driverSCALE.Price = ЦЕНА;/##CHR(13)##//##CHR(10)##/driverSCALE.Name = LEFT( ALLTRIM( НАИМЕНОВАНИЕ ), 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.Name2 = SUBSTR( ALLTRIM( НАИМЕНОВАНИЕ ), 29, 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.GCode = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/driverSCALE.Tare = 0;/##CHR(13)##//##CHR(10)##/IF ( _ВПЭВСЕГДАВЫГРУЖАТЬСРОКГОДНОСТИИЗПОСЛЕДНЕГОПРИХОДА )/##CHR(13)##//##CHR(10)##/ driverSCALE.Life = ЗАПРОС( "SELECT DATEDIFF( day, GETDATE( ), MAX( date_ex ) ) FROM spec001 WHERE nn= ( SELECT nn FROM sprnn WHERE maincode = ''" + КОД + "'' )" ); /##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ driverSCALE.Life = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/driverSCALE.WareType= ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',44.00000000,'//Подготовка выгрузки таблицы сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( сообщения )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 1;/##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы/##CHR(13)##//##CHR(10)##/driverSCALE.BeginAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',45.00000000,'//Выгрузка строки сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.MsgNo = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/mNote = STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/messageNum = 1;/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= 12 AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ else/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вычислить( "driverSCALE.MsgLine" + ALLTRIM( STR( messageNum ) ) + " = msgLine;" );/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем запись драйверу/##CHR(13)##//##CHR(10)##/driverSCALE.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',46.00000000,'//Окончание выгрузки таблицы сообщений в весы ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProgress = true;/##CHR(13)##//##CHR(10)##/driverSCALE.EndAdd( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*------- Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP8", 1 );/##CHR(13)##//##CHR(10)##/ driverSCALE.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP8", 1 );/##CHR(13)##//##CHR(10)##/ driverSCALE.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverSCALE.currentDeviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.LP8", 1 );/##CHR(13)##//##CHR(10)##/ driverSCALE.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverSCALE.deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 13:13:07') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер АТОЛ версия 8)','ВЕСЫ',0.00000000,'',0.00000000,111.00000000,0,'',0.00000000,'','',0,'F6CF2846-6482-4B83-8CD9-FF9CDD3F4C0C',0,1,0,'29.11.2018 13:13:07') #begin #description Профиль ТСД Mobile Smarts (ЕГАИС) #name Профиль ТСД Mobile Smarts (ЕГАИС) #code 0000000075 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = "C:\На терминал\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + "Номенклатура.csv";/##CHR(13)##//##CHR(10)##/_ФАЙЛВЫГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛВЫГРУЗКИ < 0;/##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если открыли существующий файл, то переходим в его конец. Иначе записываем заголовок файла/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( "Код;Артикул;Номенклатура;Штрихкод;Характеристика;Единица измерения;Коэффициент;Серия;"+/##CHR(13)##//##CHR(10)##/ "Количество;Цена;Алкоголь;Наличие марки;Код ЕГАИС;Крепость;Объём;Производитель/импортёр", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT nnvid, d_litr, a_proc, alcocode, ed, (SELECT name FROM sprclient WHERE code = sprnn.importer ) AS importer/##CHR(13)##//##CHR(10)##/ FROM sprnn sprnn/##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + СписокТоваров.maincode + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.nnvid ) > 0;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ АлкоКод = ТоварИнфо.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ТоварИнфо.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ Единица = ТоварИнфо.ed;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( КодТовара + ";" + Артикул + ";" + Наименование + ";" + ШтрихКоды + ";;" + Единица + ";1;;" + ОстатокЦена + ";" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, "Да;" + ЕСЛИ( ПивнаяПродукция, "Нет", "Да" ) + ";" + АлкоКод + ";" + mAProc + ";" + mVolume + ";" + Производитель, /##CHR(13)##//##CHR(10)##/ "Нет;;;;;" ), "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИМЯФАЙЛА = _ПАПКАВЫГРУЗКИ + ЕСЛИ( СписокДокументов.code == "001", "Приход на склад", "Подбор заказа" ) + " №" + Номер + ".csv";/##CHR(13)##//##CHR(10)##/ ФАЙЛВЫГРУЗКИ= ФАЙЛСОЗДАТЬ( ИМЯФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document}" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, """Имя"";;;;;;" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document.CombinedItems}");/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( """Code"";""Штрихкоды"";""Артикул"";""Наименование"";""Nпп"";""Факт""", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( Спецификация.maincode + ";" + ШтрихКоды + ";" + Спецификация.a_code + ";" + /##CHR(13)##//##CHR(10)##/ ЗАМЕНИТЬ( Спецификация.nnname, """", "" ) + ";" + STR( НОМЕРСТРОКИ( "Спецификация" ) + 1 ) + ";" + /##CHR(13)##//##CHR(10)##/ STR( Спецификация.kolp, 16, 3 ), "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'01.06.2016 11:43:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'/##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = "C:\С терминала\";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.csv" );/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = ЕСЛИ( UPPER( LEFT( ПОДСТРОКА( _ИМЯФАЙЛАЗАГРУЗКИ, RAT( _ИМЯФАЙЛАЗАГРУЗКИ, "\" ) + 1 ), 15 ) ) == "ПРИХОД НА СКЛАД", "001", "002" );/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ // Пропускаем первые три строки - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 1 ), """", "" );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 7 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если это не код товара, то, скорее всего, это штрих код./##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ШтрихКод = КодТовара;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'')" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += КодТовара + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'01.06.2016 11:43:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Mobile SMARTS";',0,0,0,0,'01.06.2016 11:43:18') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'01.06.2016 11:43:18') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Mobile Smarts (ЕГАИС)','ТСД',0.00000000,'',0.00000000,112.00000000,0,'',0.00000000,'','',0,'A19BEC68-F6C3-40A5-BD30-622FD65AE325',0,1,0,'01.06.2016 11:43:18') #begin #description Профиль Штрих ФР (ЕГАИС) #name Профиль Штрих ФР (ЕГАИС) #code 0000000077 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##/ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##/PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##/ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Печать может производиться на несколько ФР. Поэтому надо выбрать нужный и к нему подключиться/##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = НОМЕРУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЕГАИСURL = ЕгаисUrl.url;/##CHR(13)##//##CHR(10)##/ ЕГАИСSIGN = ЕгаисUrl.sign;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( ЕГАИС_ОТВЕТ );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ЕГАИС_ОТВЕТ;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Print2DBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСURL;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСSIGN;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = Цена;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипОтчета число целое, тип требуемого отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF ( ТИПОТЧЕТА == 7 )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Сообщение( "Выбранный отчет не поддерживается ККМ.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'06.11.2016 23:25:46') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Штрих ФР (ЕГАИС)','ФР',0.00000000,'',0.00000000,116.00000000,0,'',0.00000000,'','',0,'2AE9E36B-DBD1-4258-887A-8E104752C084',0,1,0,'06.11.2016 23:25:46') #begin #description Профиль ФР Атол v.2 вскрытие тары #name Профиль ФР Атол v.2 вскрытие тары #code 0000000079 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.CancelCheck();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Частичная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.PartialCut();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "FPrint-03K";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека != 0 AND ТипЧека != 1 )/##CHR(13)##//##CHR(10)##/ RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем смену/##CHR(13)##//##CHR(10)##/// Требуется войти в режим регистрации/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.OpenSession();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода OpenSession " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открываем документ на печать/##CHR(13)##//##CHR(10)##/Driver.GetStatus( ); // Определяем тем самым номера текущих смены и чека/##CHR(13)##//##CHR(10)##/Driver.BeginDocument( );/##CHR(13)##//##CHR(10)##/Driver.Caption = "Открытие смены " + STR( VAL( Driver.Session ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( ); //Печать строки в буфер/##CHR(13)##//##CHR(10)##/Driver.Caption = "Текущий номер чека " + STR( VAL( Driver.CheckNumber ) + 1 );/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##/Driver.Caption = Заголовок;/##CHR(13)##//##CHR(10)##/Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем документ, тем самым печатаем данные из буфера/##CHR(13)##//##CHR(10)##/Driver.EndDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка метода EndDocument " + Driver.ResultCode + " при открытии смены ФР" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "НДС" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ ИТОГОНДС[ КомандыЧека.kodn ]+= ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "ОТМЕНА НДС" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.destination;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ Driver.ResetTax( );/##CHR(13)##//##CHR(10)##/ //ИТОГОНДС[ КомандыЧека.kodn ]+= СУММАНДС;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.Payment( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если был начислен НДС, то выводим его/##CHR(13)##//##CHR(10)##/ КодНалога = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( КодНалога <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИТОГОНДС[ КодНалога ] != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Destination = 0;/##CHR(13)##//##CHR(10)##/ Driver.Summ = ИТОГОНДС[ КодНалога ];/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КодНалога;/##CHR(13)##//##CHR(10)##/ Driver.SummTax( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КодНалога++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Для нефискальных чеков увеличиваем номер/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, /##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ЕСЛИ( ТипЧека == 1, "2", "1" ) + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Вскрытие тары'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 3, 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( Цена, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СУММАПРОДАЖИ != ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СУММАПРОДАЖИ < ROUND( Количество, 3 ) * ROUND( Цена, 2 ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, 1, " + STR( ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ) - СУММАПРОДАЖИ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, 1, " + STR( СУММАПРОДАЖИ - ROUND( ROUND( Количество, 3 ) * ROUND( Цена, 2 ), 2 ), 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ОТМЕНА НДС'', ''" + FROperatorProfile + "'', 1, 0, '''', 0, " + STR( СУММАНДС, 16, 2 ) + ", 1, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Процентная скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Процент, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая наценка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, discountvalue )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Суммовая скидка'', '''', 1, 0, '''', 0, 0, " + Destination + ", " + STR( Сумма, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.11.2016 18:02:12') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.2 вскрытие тары','ФР',0.00000000,'',0.00000000,118.00000000,0,'',0.00000000,'','',0,'F7DC0890-FD74-4A80-9F7A-810E28D0E0D8',0,1,0,'22.11.2016 18:02:12') #begin #description Обмен данными с POS-терминал Viki POS #name Обмен данными с POS-терминал Viki POS #code 0000000080 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ""; // Фронтол 5.9 перестал понимать это поле адекватно ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN cat = ''001'' THEN dbo.fn_fullnnname( code ) ELSE name END AS name, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0;/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054" ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = ЕСЛИ( VAL( warecode ) == 0, "", STR( VAL( warecode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ warecode = warecode_org;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF(ПУСТО(karta))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "41" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.12.2019 16:44:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с POS-терминал Viki POS','ККМ',0.00000000,'',0.00000000,119.00000000,0,'',0.00000000,'','',0,'89069EDA-C98C-48AD-A518-25AF82E4764C',0,1,0,'20.12.2019 16:44:57') #begin #description ТСД (драйвер Атол версия 8) v.2 #name ТСД (драйвер Атол версия 8) v.2 #code 0000000061 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',4.00000000,'//Установка значения поля в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = НомерПоля;/##CHR(13)##//##CHR(10)##/driverTSD.ReportField = ALLTRIM( ЗначениеПоля );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',5.00000000,'//Добавление записи в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.SetRecord( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',6.00000000,'//Окончание выгрузки в ТСД/##CHR(13)##//##CHR(10)##/driverTSD.AddMode = 0;/##CHR(13)##//##CHR(10)##/driverTSD.EndAdd( );/##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Отпускаем устройство, чтобы была возможность его еще раз использовать/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##///------ Указываем драйверу номер формы из которой будем загружать данные/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.ShowProgress = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.BeginReport( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##///---- Читаем очередную запись из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.GetRecord()/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИНДЕКСПОЛЯ;/##CHR(13)##//##CHR(10)##/ЗначениеПоля = ALLTRIM( driverTSD.ReportField );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЗначениеПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.EndReport( );/##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = false; // Закрываем усройство/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИТСД ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/ driverTSD.Clear( );/##CHR(13)##//##CHR(10)##/ _ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Закрываем усройство/##CHR(13)##//##CHR(10)##///driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',11.00000000,'//Текст ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ОШИБКАРАБОТЫСТСД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',12.00000000,'//Признак наличия ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоПолей = driverTSD.ReportFieldCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоПолей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоЗаписей = driverTSD.ReportRecordCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоЗаписей;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСПОЛЯ >= driverTSD.ReportFieldCount ) RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.ReportFieldIndex = ИндексПоля;/##CHR(13)##//##CHR(10)##/ИмяПоля = driverTSD.ReportFieldName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИмяПоля;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX8", 1 );/##CHR(13)##//##CHR(10)##/ driverTSD.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverTSD.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX8", 1 );/##CHR(13)##//##CHR(10)##/ driverTSD.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverTSD.currentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverTSD.currentDeviceName;/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX8", 1 );/##CHR(13)##//##CHR(10)##/ driverTSD.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverTSD.deviceCount;/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',21.00000000,'//Окончание работы с ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = false; // Закрываем усройство/##CHR(13)##//##CHR(10)##/driverTSD = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1.00000000,'//Инициализация ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC НОМЕРУСТРОЙСТВАТСД, ОШИБКАРАБОТЫСТСД, driverTSD;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАТСД = НомерУстройства; // Номер устройства/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Инициализация ТСД/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/ driverTSD = СоздатьОбъект( "AddIN.PDX8", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverTSD") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverTSD.LoadDevicesSettings( );/##CHR(13)##//##CHR(10)##/ driverTSD.currentDeviceNumber = НОМЕРУСТРОЙСТВАТСД; // Номер устройства/##CHR(13)##//##CHR(10)##/ driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',2.00000000,'//Очистка ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Очистка производится в окончании загрузки из ТСД/##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = true; /##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.Clear( );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',3.00000000,'//Инициализация выгрузки в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverTSD.DeviceEnabled = true; // Актвируем устройство/##CHR(13)##//##CHR(10)##/driverTSD.FormNumber = НомерФормы;/##CHR(13)##//##CHR(10)##/driverTSD.BeginAdd( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverTSD.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ОШИБКАРАБОТЫСТСД = driverTSD.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'26.07.2016 17:02:09') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','ТСД (драйвер Атол версия 8) v.2','ТСД',0.00000000,'',0.00000000,93.00000000,0,'',0.00000000,'','',0,'4DF5860A-2F91-46F1-A861-DE89E66E50CE',0,1,0,'26.07.2016 17:02:09') #begin #description Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС) (вскрытие тары) #name Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС) (вскрытие тары) #code 0000000081 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GETWORD( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> ''18'', "008", /##CHR(13)##//##CHR(10)##/ IIF( VAL( dockIndCode ) == 18, "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN cat = ''001'' THEN dbo.fn_fullnnname( code ) ELSE name END AS name, nnvid, d_litr, a_proc, ed/##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = LEFT( ALLTRIM( cname ), 100 );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем Коды Групп печати /##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиЧека '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиКопии '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиСчета '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##///kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'',''S02'', ''КодГруппыПечатиМарки '', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/// Если не указаны коды групп печати, то берем их из кода ФР/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( kodGrPintChek ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco AND !РазливнойАлко, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/*/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'18.11.2016 11:21:29') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.6.2 (ЕГАИС) (вскрытие тары)','ККМ',0.00000000,'',0.00000000,121.00000000,0,'',0.00000000,'','',0,'5B2D67B8-F94E-41DA-B227-E08D972EE457',0,1,0,'18.11.2016 11:21:29') #begin #description Весы Штрих Слим #name Весы Штрих Слим #code 0000000082 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.07.2016 12:08:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.DrvSM", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера AddIn.DrvSM" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.Connect( ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ДрайверВесов.Connected )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключится к весам. Проверьте соединение кабеля." );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДрайверВесов.GetChannelStatus( );/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка: " + ДрайверВесов.ResultCodeDescription );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,0,0,'20.07.2016 12:08:53') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы Штрих Слим','ВЕСЫБЭ',0.00000000,'',0.00000000,122.00000000,0,'',0.00000000,'','',0,'9E379031-3CF4-4454-9237-929D2851BCEC',0,1,0,'31.10.2019 11:24:46') #begin #description Передача данных в АТОЛ SMART Checker PiP #name Передача данных в АТОЛ SMART Checker PiP #code 0000000083 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/DOWNLOAD_ANALOGS = 1; // Признак необходимости выгрузки аналогов товаров (1 -выгружать аналоги ,0 - не выгружать)/##CHR(13)##//##CHR(10)##/ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ = 0; // Признак необходимости перезаписи имеющихся файлов с изображениями товаров в папке IMG/##CHR(13)##//##CHR(10)##/ // (0- не перезаписывать,1 - перезаписывать)/##CHR(13)##//##CHR(10)##/ВЕСТИ_ЖУРНАЛ = 1; // Признак необходимости ведения журнала копирования изображений в ПЧ/##CHR(13)##//##CHR(10)##/ // (0- не вести журнал,1 - вести журнал )./##CHR(13)##//##CHR(10)##/// Журнал хранится в файле journ_copy_img.txt в папке,указанной в карточке торгового оборудования для ПЧ/##CHR(13)##//##CHR(10)##///(в той папек,где хранится файл выгрузки данных в ПЧ)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( EMPTY( exchangeservice_out ) AND NOT EMPTY( path_flag_out ) )/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/// Папки не поддерживаются/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$PIP_ADDWARE" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( STDE( code ) );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( STDE( barcode ) );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( STDE( name ) );/##CHR(13)##//##CHR(10)##/mVolWeight = ALLTRIM( STDE( ЗАПРОС( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''" ) ) );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/mBrand = ALLTRIM( STDE( ЗАПРОС( "SELECT name FROM sprmanuf WHERE code = ( SELECT manuf_code FROM sprnn WHERE maincode = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Путь и имя файла с картинкой /##CHR(13)##//##CHR(10)##/mImage_path = LOWER(ALLTRIM( image_path ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Формируем имя файла, в который будем записывать картинку/##CHR(13)##//##CHR(10)##/ИмяФайлаКартинки= LEFT( path_out, RAT( path_out, ''\'' ) ) + "IMG\" + mCode + ".jpg";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///флажок необходимости выполнения команды /##CHR(13)##//##CHR(10)##/ТипКартинки = LOWER( ЗАПРОС( "SELECT fileext FROM sprres_image WHERE code= ''" + nn + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипКартинки == "jpg" AND ( !ФАЙЛ( ИмяФайлаКартинки ) OR ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ ) ) /##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ Картинка = ЗАПРОС("SELECT image_ FROM sprres_image WHERE code= ''" + nn + "''" );/##CHR(13)##//##CHR(10)##/ Файл = ФайлСоздать( ИмяФайлаКартинки );/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( Файл, Картинка );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mImage_path = mCode + ".jpg";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если указано имя внешнего файла, то копируем его в каталог/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( mImage_path ) AND RIGHT( mImage_path, 4 ) == ".jpg" AND ФАЙЛ( mImage_path ) AND ( !ФАЙЛ( ИмяФайлаКартинки ) OR ПЕРЕЗАПИСЫВАТЬ_КАРТИНКИ ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( mImage_path );/##CHR(13)##//##CHR(10)##/ Картинка = ФайлПрочитать( Файл, "B" );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ Файл = ФайлСоздать( ИмяФайлаКартинки );/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( Файл, Картинка );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mImage_path = mCode + ".jpg";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ mImage_path = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mNote = STDE( STRTRAN( STRTRAN( ALLTRIM( note ), CHR( 13 ), " " ), CHR( 10 ), " " ) );/##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + mName + ";" + mCena + ";" + mImage_path + ";" + STDE( mVolWeight ) + ";" + mNote + ";" + mBrand;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (DOWNLOAD_ANALOGS==1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Удаление аналогов из ККМ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWAREANALOGS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( saldotype == 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWAREANALOGSBYCODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгрузка аналогов /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "select s.maincode as code1,b.maincode as code2 from sprnn s inner join /##CHR(13)##//##CHR(10)##/ sprnnlinks_alter a on s.nn=a.nn inner join sprnn b on a.nn_alter=b.nn inner join /##CHR(13)##//##CHR(10)##/ (SELECT code FROM " + ТОВАРЫ+") t on t.code=s.maincode where a.nn_r ='''' /##CHR(13)##//##CHR(10)##/ and b.maincode in (SELECT code FROM " + ТОВАРЫ+")", "Аналоги"); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Выбратьконтекст("Аналоги");/##CHR(13)##//##CHR(10)##/IF (reccount("Аналоги")==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Аналоги" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDWAREANALOGS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///code1 - код товара (берется из maincode)/##CHR(13)##//##CHR(10)##///code2 - код аналога (берется из maincode)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/prev=''''; -- предыдущее значения кода товара/##CHR(13)##//##CHR(10)##/i=0; -- код текущего аналога для данного товара(по каждому товару нумерация аналогов начинается с 1)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Аналоги" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ if (code1<>prev) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ prev=code1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i+=1;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла,alltrim(str(i))+";"+code1+";"+code2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Аналоги" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ } -- DOWNLOAD_ANALOGS==1/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'04.08.2016 16:31:46') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Передача данных в АТОЛ SMART Checker PiP','ККМ',0.00000000,'',0.00000000,126.00000000,0,'',0.00000000,'','',0,'3EBC3834-098A-4596-A5AB-C26A0742F2B7',0,1,0,'07.09.2016 16:07:52') #begin #description Обмен данными с АЗС (Барнаул) #name Обмен данными с АЗС (Барнаул) #code 0000000086 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/КодСтруктуры = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТаблицаТоваров = ТАБЛИЦАСОЗДАТЬ( СЖАТЬПРОБЕЛЫ( path_out ) + "\Price.DBF", "ID C( 11 ), NAME C( 100 ), DIM C( 5 ), PRICE N( 15, 2 ), ACCESS L, GROUP C( 100 ), NDS N ( 3 )", 0, 3 );/##CHR(13)##//##CHR(10)##/ТаблицаШК = ТАБЛИЦАСОЗДАТЬ( СЖАТЬПРОБЕЛЫ( path_out ) + "\Barcode.DBF", "ID C( 11 ), BARCODE C( 20 )", 0, 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##/IF ( ТаблицаТоваров < 0 OR ТаблицаШК < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл(ы) для выгрузки данных в каталоге ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT temp.*, sprnn.nnvid, sprnn.identity_column AS ic, sprnn.ed,/##CHR(13)##//##CHR(10)##/ ( SELECT proc_ FROM sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype <> '''' AND CHARINDEX( code, ( SELECT TOP 1 list FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = sprnn.kodn AND date <= GETDATE( ) /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC) ) > 0 ) AS vat,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN ex_code = '''' THEN code ELSE ex_code END FROM spredn WHERE code = sprnn.ed ) AS ed_code, " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( КодСтруктуры ), /##CHR(13)##//##CHR(10)##/ "( SELECT TOP 1 name FROM fn_getparentlist( ''S02'', sprnn.identity_column, ''" + КодСтруктуры + "'' ) WHERE folder = 1 AND parent <> 0 ORDER BY identity_column )",/##CHR(13)##//##CHR(10)##/ "parent.name" ) + " AS parentname/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON temp.nn = sprnn.nn " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПУСТО( КодСтруктуры ), "LEFT OUTER JOIN sprnn parent ON parent.identity_column = sprnn.parent ", "" ), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ТАБЛИЦАПРИВЯЗАТЬПОЛЯ( ТаблицаТоваров, "*" );/##CHR(13)##//##CHR(10)##/ТАБЛИЦАПРИВЯЗАТЬПОЛЯ( ТаблицаШК, "*" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ID = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ NAME = СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ DIM = СписокТоваров.ed;/##CHR(13)##//##CHR(10)##/ PRICE = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ACCESS = true;/##CHR(13)##//##CHR(10)##/ GROUP = СписокТоваров.parentname;/##CHR(13)##//##CHR(10)##/ NDS = СписокТоваров.vat;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТАБЛИЦАДОБАВИТЬЗАПИСЬ( ТаблицаТоваров, "ID, NAME, DIM, PRICE, ACCESS, GROUP, NDS");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT koef, barcode FROM " + ШТРИХКОДЫ + " WHERE nn = ''" + СписокТоваров.nn + "''", "СписокШК" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ barcode = СписокШК.barcode;/##CHR(13)##//##CHR(10)##/ ТАБЛИЦАДОБАВИТЬЗАПИСЬ( ТаблицаШК, "ID, BARCODE" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ТАБЛИЦАЗАКРЫТЬ( ТаблицаТоваров );/##CHR(13)##//##CHR(10)##/ТАБЛИЦАЗАКРЫТЬ( ТаблицаШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем архиватор для схатия обоих файлов/##CHR(13)##//##CHR(10)##/ВЫПОЛНИТЬ( СЖАТЬПРОБЕЛЫ( path_out ) + "\rar.exe", "a 1c_server.rar Price.DBF Barcode.DBF", СЖАТЬПРОБЕЛЫ( path_out ), "", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписьТранзакции( tranzType )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ БЫЛИТРАНЗАКЦИИПОФРВЫБРАННОМУВТО = true;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( CTOD( tranztime ) ) + "'', '''', " + STR( POSNumber ) + ", ''" + doccode + "'', 0, '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( chequeNumber ) ) + ", " + chequeType + ", " + ecrSession + ", '''', " + STR( POSNumber ) + ",/##CHR(13)##//##CHR(10)##/ '''', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', '''', '''', " + STR( Quantity, 16, 3 ) + ", '''', '''', /##CHR(13)##//##CHR(10)##/ " + ecrSession + ", " + STR( SummWD, 16, 3 ) + ", " + STR( SummaBN, 16, 2 )+ ", " + STR( SummWD, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( PriceWD, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + STR( POSNumber ) + ", /##CHR(13)##//##CHR(10)##/ '''', ''" + warecode + "'', " + payment_type + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ РазборФайлаПродажи( ИмяФайла )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fileHandle = ФАЙЛОТКРЫТЬ( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/ kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ НашлиПродажи = false;/##CHR(13)##//##CHR(10)##/ //------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 ) THROW 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Чмтаем файл, пока не встретим строку, начинающуюся с GOODS_SALES/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( fileHandle ) AND !НашлиПродажи )/##CHR(13)##//##CHR(10)##/ НашлиПродажи = LEFT( UPPER( ФАЙЛПРОЧИТАТЬ( fileHandle, "S" ) ), 11 ) == "GOODS_SALES";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !НашлиПродажи ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/ tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/ foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/ client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/ maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/ identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( fileHandle ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФАЙЛПРОЧИТАТЬ( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = "@" + ЗАМЕНИТЬ( string, "||", "@" );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( string, "@", "@", 1 ), ",","." ) );/##CHR(13)##//##CHR(10)##/ ecrSession = ПОЛУЧИТЬСЛОВО( string, "@", "@", 2 );/##CHR(13)##//##CHR(10)##/ tranzCount = ПОЛУЧИТЬСЛОВО( string, "@", "@", 3 );/##CHR(13)##//##CHR(10)##/ tranzDate = ПОЛУЧИТЬСЛОВО( string, "@", "@", 4 );/##CHR(13)##//##CHR(10)##/ tranzTime = ПОЛУЧИТЬСЛОВО( string, "@", "@", 4 );/##CHR(13)##//##CHR(10)##/ wareCode = ПОЛУЧИТЬСЛОВО( string, "@", "@", 5 );/##CHR(13)##//##CHR(10)##/ nnname = ПОЛУЧИТЬСЛОВО( string, "@", "@", 6 );/##CHR(13)##//##CHR(10)##/ PriceWD = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( string, "@", "@", 7 ), ",","." ) );/##CHR(13)##//##CHR(10)##/ Quantity = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( string, "@", "@", 8 ), ",","." ) );/##CHR(13)##//##CHR(10)##/ SummWD = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( string, "@", "@", 9 ), ",","." ) );/##CHR(13)##//##CHR(10)##/ payment_type = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( string, "@", "@", 10), ",","." ) );/##CHR(13)##//##CHR(10)##/ summabn = ЕСЛИ( payment_type == 9, 0, SummWD );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzType = "";/##CHR(13)##//##CHR(10)##/ chequeNumber = tranzCount;/##CHR(13)##//##CHR(10)##/ Seller = "";/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = PriceWD;/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ Summ = SummWD;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + STDF( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, ЕСЛИ( ПУСТО( СПИСОКФР.firm ), ФИРМАПОУМОЛЧАНИЮ, СПИСОКФР.firm), ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 11 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( path_in ) + "\*.rar", "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КоличествоФайлов > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файлов", КоличествоФайлов );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/НомерФайла = 1;/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = false;/##CHR(13)##//##CHR(10)##/WHILE ( НомерФайла <= КоличествоФайлов )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаАрхива = ИменаФайловДляЗагрузки[ НомерФайла - 1 ];/##CHR(13)##//##CHR(10)##/ КраткоеИмяайла = SUBSTR( ИмяФайлаАрхива, RAT( ИмяФайлаАрхива, "\" ) + 1 );/##CHR(13)##//##CHR(10)##/ IF ( НомерФайла > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НомерФайла, КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Необходимо посчитать сколько текстовых файлов получилось для загрузки /##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ( СЖАТЬПРОБЕЛЫ( path_in ) + "\rar.exe", "e -y " + ИмяФайлаАрхива, path_in, "", 3 );/##CHR(13)##//##CHR(10)##/ КоличествоТекстовыхФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( path_in + "\*.txt" ), "ИменаТекстовыхФайлов");/##CHR(13)##//##CHR(10)##/ НомерТекстовогоФайла = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( НомерТекстовогоФайла <= КоличествоТекстовыхФайлов )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ИмяТекстовогоФайла = ИменаТекстовыхФайлов[ НомерТекстовогоФайла - 1 ];/##CHR(13)##//##CHR(10)##/ КраткоеИмяайла = SUBSTR( ИмяТекстовогоФайла, RAT( ИмяТекстовогоФайла, "\" ) + 1 );/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ ФИРМАПОУМОЛЧАНИЮ = @ФИРМАПОУМОЛЧАНИЮ;/##CHR(13)##//##CHR(10)##/ foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/ maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазборФайлаПродажи( ИмяТекстовогоФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось загрузить файл ''" + ИмяТекстовогоФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( ИмяТекстовогоФайла );/##CHR(13)##//##CHR(10)##/ НомерТекстовогоФайла++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайлаАрхива, ИмяФайлаАрхива + ".bak" );/##CHR(13)##//##CHR(10)##/ НомерФайла++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Завершение загрузки данных./##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MESSAGEBOX("В файлах не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.10.2016 11:28:10') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с АЗС (Барнаул)','ККМ',0.00000000,'',0.00000000,6594.00000000,0,'',0.00000000,'','',0,'930DC6B4-F035-4BD9-AD8F-04A29D4891B3',0,1,0,'07.10.2016 11:28:10') #begin #description Профиль ТСД Mobile Smarts (ЕГАИС - mag15) Сбор начальных остатков. #name Профиль ТСД Mobile Smarts (ЕГАИС - mag15) Сбор начальных остатков. #code 0000000091 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = "C:\На терминал\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + "Номенклатура.csv";/##CHR(13)##//##CHR(10)##/_ФАЙЛВЫГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛВЫГРУЗКИ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛВЫГРУЗКИ < 0;/##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если открыли существующий файл, то переходим в его конец. Иначе записываем заголовок файла/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( "Код;Артикул;Номенклатура;Штрихкод;Единица измерения;Коэффициент;Характеристика;"+/##CHR(13)##//##CHR(10)##/ "Количество;Цена;Алкоголь;Наличие марки;Код ЕГАИС;Крепость;Объём;Производитель/импортёр", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT nnvid, d_litr, a_proc, alcocode, ed, (SELECT name FROM sprclient WHERE code = sprnn.importer ) AS importer/##CHR(13)##//##CHR(10)##/ FROM sprnn sprnn/##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + СписокТоваров.maincode + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.nnvid ) > 0;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ АлкоКод = ТоварИнфо.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = """" + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ТоварИнфо.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ) + """";/##CHR(13)##//##CHR(10)##/ Единица = ТоварИнфо.ed;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( КодТовара + ";" + Артикул + ";" + Наименование + ";" + ШтрихКоды + ";" + Единица + ";1;;" + ОстатокЦена + ";" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, "Да;" + ЕСЛИ( ПивнаяПродукция, "Нет", "Да" ) + ";" + АлкоКод + ";" + mAProc + ";" + mVolume + ";" + Производитель, /##CHR(13)##//##CHR(10)##/ "Нет;;;;;" ), "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИМЯФАЙЛА = _ПАПКАВЫГРУЗКИ + ЕСЛИ( СписокДокументов.code == "001", "Поступление", "Подбор заказа" ) + " №" + Номер + ".csv";/##CHR(13)##//##CHR(10)##/ ФАЙЛВЫГРУЗКИ= ФАЙЛСОЗДАТЬ( ИМЯФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{Document}" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "Name;Appointment" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( "Поступление №" + Номер + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, "#{DeclaredItems}");/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( "Код;Штрихкод;Название;Характеристика;Цена;Заявлено;Принято", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФАЙЛВЫГРУЗКИ, ПЕРЕКОДИРОВАТЬ( Спецификация.maincode + ";" + ШтрихКоды + ";" + ЗАМЕНИТЬ( Спецификация.nnname, """", "" ) + ";;" + /##CHR(13)##//##CHR(10)##/ STR( Спецификация.cena, 16, 2 ) + ";" + /##CHR(13)##//##CHR(10)##/ STR( Спецификация.kolp, 16, 3 ) + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФАЙЛВЫГРУЗКИ );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'21.09.2016 11:19:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'/##CHR(13)##//##CHR(10)##/// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = "C:\С терминала\";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.csv" );/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ // Пропускаем первые три строки - это пустые заголовки/##CHR(13)##//##CHR(10)##/// ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/// ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 1 ), """", "" );/##CHR(13)##//##CHR(10)##/ // Если несколько ШК, то берем первый из них/##CHR(13)##//##CHR(10)##/ IF ( AT( ШтрихКод, "|" ) > 0 )/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЛЕВСИМВ( ШтрихКод, AT( ШтрихКод, "|" ) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 12 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 17 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'21.09.2016 11:19:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Mobile SMARTS";',0,0,1,0,'21.09.2016 11:19:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'21.09.2016 11:19:16') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Mobile Smarts (ЕГАИС - mag15) Сбор начальных остатков.','ТСД',0.00000000,'',0.00000000,112.00000000,0,'',0.00000000,'','',0,'52A55492-DF53-4FC0-8CCC-EBDFF5ADC85C',0,1,0,'21.09.2016 11:19:28') #begin #description Обмен данными с Фронтол Менеджер #name Обмен данными с Фронтол Менеджер #code 0000000078 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" + mState ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mCname = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = IIF( parent == 0, "", ALLTRIM( STR( ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДПодразделения = ЗАПРОС( "SELECT ex_code FROM sprbranch WHERE code = (SELECT branch FROM sprskl WHERE code = ''" + ALLTRIM( sklad ) + "'' )" );/##CHR(13)##//##CHR(10)##/ИДГруппыДанных = ИДПодразделения;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";0;;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";;;" + mActionPriz + ";;" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;;;;;" + ИДПодразделения + ";;;" + ИДГруппыДанных + ";;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_ FROM sprkodn ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "''", "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ ";;;;;" + DTOC( DATE( ) ) + ";;;;;;" +/##CHR(13)##//##CHR(10)##/ IIF( EMPTY( parent ), "", ALLTRIM( STR( ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" ); //--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/ИДПодразделения = ЗАПРОС( "SELECT ex_code FROM sprbranch WHERE code = (SELECT branch FROM sprskl WHERE code = ''" + ALLTRIM( sklad ) + "''" );/##CHR(13)##//##CHR(10)##/ИДГруппыДанных = ИДПодразделения;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" + ИДПодразделения );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF(ПУСТО(karta))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 16:00:56') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол Менеджер','ККМ',0.00000000,'',0.00000000,117.00000000,0,'',0.00000000,'','',0,'465F107C-E583-46B7-8C74-B4ECE0B0009E',0,1,0,'08.04.2019 16:00:56') #begin #description Масса-К Driver-R Весы без печати этикеток #name Масса-К Driver-R Весы без печати этикеток #code 0000000089 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',34.00000000,'//Окончание работы с ВЕСАМИ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/МассаКВБПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВБПЭDevice = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.10.2016 13:49:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВБПЭDriver, МассаКВБПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВБПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/МассаКВБПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВБПЭDriver" ) != "O" OR ТИП( "МассаКВБПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВБПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВБПЭDriver = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВБПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВБПЭDriver.ResultCode < 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'11.10.2016 13:49:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВБПЭDevice.GetWeight( );/##CHR(13)##//##CHR(10)##/RETURN МассаКВБПЭDevice.Weight / 1000.00;',0,0,1,0,'11.10.2016 13:49:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',32.00000000,'//Текст ошибки драйвера ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN МассаКВБПЭDriver.ResultDescription;',0,0,1,0,'11.10.2016 13:49:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',33.00000000,'//Признак наличия ошибки драйвера ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN МассаКВБПЭDriver.ResultCode < 0;',0,0,1,0,'11.10.2016 13:49:32') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Масса-К Driver-R Весы без печати этикеток','ВЕСЫБЭ',0.00000000,'',0.00000000,135.00000000,0,'',0.00000000,'','',0,'B6B4D863-675F-46FD-9F5F-1FE6A420413E',0,1,0,'31.10.2019 11:24:46') #begin #description Масса-К Driver-R Весы регистраторы (режим ККМ) #name Масса-К Driver-R Весы регистраторы (режим ККМ) #code 0000000092 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТСООБЩЕНИЯОБОШИБКЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN _КОДСООБШЕНИЯОБОШИБКЕ <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',291.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice, МассаКВПЭGoods;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если объекты драйвера созданы, то удаляем их, чтобы не мешали/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФОРМА = ФОРМА( "МАССАК:СвойстваДрайвера", "001" );/##CHR(13)##//##CHR(10)##/Форма.CreateSimple( КОДОБОРУДОВАНИЯ ); /##CHR(13)##//##CHR(10)##/Форма.Show( );/##CHR(13)##//##CHR(10)##/Форма.DoModal( true );/##CHR(13)##//##CHR(10)##/Форма = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',292.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В драйвере Масса-К нет возможности установить индекс устройства, поэтому, в цикле отсчитываем нужное количество раз/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/Номер = 0;/##CHR(13)##//##CHR(10)##/WHILE ( МассаКВПЭDriver.ResultCode == 0 AND Номер < ИНДЕКСУСТРОЙСТВА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( );/##CHR(13)##//##CHR(10)##/ Номер++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( МассаКВПЭDriver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = МассаКВПЭDevice.name + " (" + МассаКВПЭDevice.connection + ")";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',293.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В драйвере Масса-К нет возможности установить индекс устройства, поэтому, в цикле отсчитываем нужное количество раз/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/WHILE ( МассаКВПЭDriver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОУСТРОЙСТВ++;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДСООБШЕНИЯОБОШИБКЕ;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice, МассаКВПЭGoods, _ТЕКСТСООБЩЕНИЯОБОШИБКЕ, _КОДСООБШЕНИЯОБОШИБКЕ, ПРИЗНАКВЫВОДИТЬКОММЕНТАРИИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = 0;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = "";/##CHR(13)##//##CHR(10)##/ПРИЗНАКВЫВОДИТЬКОММЕНТАРИИ = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Инициализация ВЕСОВ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Goods", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" OR ТИП( "МассаКВПЭGoods" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) + ": Не удалось создать объект драйвера.";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) - 1;/##CHR(13)##//##CHR(10)##/ // Выбираем нужное устройство/##CHR(13)##//##CHR(10)##/ ПОКА ( Номер > 0 && МассаКВПЭDriver.ResultCode == 0 ) /##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( ); /##CHR(13)##//##CHR(10)##/ Номер = Номер - 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode < 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ ) МассаКВПЭDevice.DeleteGoods( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы (очищаем буфер объекта)/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'/##CHR(13)##//##CHR(10)##/// Вместо PLU используем код товара, т.к. продавать должны уметь все выгружаемые товары/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN (SELECT f_weight FROM spredn WHERE code= s.ed) = 1 THEN 0 ELSE 1 END AS waretype, store_period, /##CHR(13)##//##CHR(10)##/ weight * CASE WHEN ed_weight = ''кг'' THEN 1000000 ELSE 1000 END AS UnitWeight, ed,/##CHR(13)##//##CHR(10)##/ (SELECT LEFT( bctemplate, 2 ) FROM spredn WHERE code = s.ed ) AS prefix/##CHR(13)##//##CHR(10)##/ FROM sprnn s WHERE maincode =''" + STDF( code ) + "''", "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.ID = VAL( code );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Code = code;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Name = name;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.GoodsTypeID = ТоварИнфо.wareType;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Price = ЦЕЛОЕ( cena * 100 );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.GroupCode = 0;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.TarеWeight = 0;/##CHR(13)##//##CHR(10)##/IF ( МассаКВПЭGoods.GoodsTypeID == 1 ) // Для штучного товара передаем вес единицы/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.UnitWeight = ТоварИнфо.UnitWeight;/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКВЫВОДИТЬКОММЕНТАРИИ )/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.Ingredients = LEFT( note, 1000 );/##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.store_period != 0 ) /##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.BestBefore = ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДОБАВИТЬДНИ( ДАТА( ), ТоварИнфо.store_period ), 0 ), ".", "-" ), " ", "-" );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.ShelfLife = ТоварИнфо.store_period * 1440;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Barcode = barcode;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.PLU = VAL( code );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.BasicUnit = LEFT( ТоварИнфо.ed, 5 );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.prefix ) ) /##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.BarcodePrefix= VAL( ТоварИнфо.prefix );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Add( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ. Передаем данные в оборудование и закррываем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteType = 1;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteGoods( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если указано, что надо выгружать склады, то выгружаем их/##CHR(13)##//##CHR(10)##/ IF ( VAL( ЗАПРОС( "SELECT value FROM param WHERE param = ''ВыгружатьСклад" + КОДОБОРУДОВАНИЯ + "''" ) ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.DeleteStore( );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Store", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Clear( );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprskl WHERE folder = 0 AND notavail = 0", "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ ПОКА( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.ID = VAL( СписокСкладов.code );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Code = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Name = LEFT( СписокСкладов.name, 100 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Add( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteType = 0;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteStore( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если указано, что надо выгружать контрагентов, то выгружаем их/##CHR(13)##//##CHR(10)##/ IF ( VAL( ЗАПРОС( "SELECT value FROM param WHERE param = ''ВыгружатьКонтрагента" + КОДОБОРУДОВАНИЯ + "''" ) ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.DeleteContractor( );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Contractor", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprclient WHERE folder = 0 AND notavail = 0", "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ ПОКА( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.ID = VAL( code );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Code = code;/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Name = LEFT( name, 100 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Add( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteType = 0;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteContractor( );/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭStore = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭContractor = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##///Инициализация ВЕСОВ /##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice, МассаКВПЭGoods;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Operator_", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" OR ТИП( "МассаКВПЭOperator" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator = false;/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) + ": Не удалось создать объект драйвера.";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) - 1;/##CHR(13)##//##CHR(10)##/ // Выбираем нужное устройство/##CHR(13)##//##CHR(10)##/ ПОКА ( Номер > 0 && МассаКВПЭDriver.ResultCode == 0 ) /##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( ); /##CHR(13)##//##CHR(10)##/ Номер = Номер - 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode < 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##/ //Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##/ // Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ ) МассаКВПЭDevice.DeleteOperator( );/##CHR(13)##//##CHR(10)##/ // Подаем команду начала выгрузки в весы (очищаем буфер объекта)/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.ID = VAL( code );/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.Code = code;/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.Name = name;/##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.Passcode = VAL( password );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ МассаКВПЭOperator.Add( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteType = 0;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteOperator( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭOperator = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = _КОДСООБШЕНИЯОБОШИБКЕ != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmfirm = firm;/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''.");/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Transaction", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" OR ТИП( "МассаКВПЭTransaction" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction = false;/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) + ": Не удалось создать объект драйвера.";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВА = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Get( );/##CHR(13)##//##CHR(10)##/ Номер = НОМЕРУСТРОЙСТВА - 1;/##CHR(13)##//##CHR(10)##/ // Выбираем нужное устройство/##CHR(13)##//##CHR(10)##/ ПОКА ( Номер > 0 && МассаКВПЭDriver.ResultCode == 0 ) /##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( ); /##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Get( );/##CHR(13)##//##CHR(10)##/ Номер = Номер - 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode < 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запрашиваем необходимые транзакции/##CHR(13)##//##CHR(10)##/МассаКВПЭTransaction.DeviceID = МассаКВПЭDevice.ID;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.DeviceTransactionNumber = ЗАПРОС( "SELECT lasttranscount FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) + 1;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.ReadFromTransactionNumber( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.DeviceTransactionNumber = 0;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.ReadFromTransactionNumber( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = "Неверно указан интервал продаж. " + CHR( 13 ) + "Можно запрошивать только новые, или все продажи.";/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction = false;/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭTransaction.GetFirst( );/##CHR(13)##//##CHR(10)##/IF ( МассаКВПЭDriver.ResultCode != 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction = false;/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/WHILE ( МассаКВПЭDriver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzCount = МассаКВПЭTransaction.DeviceTransactionNumber;/##CHR(13)##//##CHR(10)##/ tranzDate = МассаКВПЭTransaction.TransactionDate;/##CHR(13)##//##CHR(10)##/ tranzTime = "";/##CHR(13)##//##CHR(10)##/ tranzType = МассаКВПЭTransaction.TransactionTypeID;/##CHR(13)##//##CHR(10)##/ POSNumber = 0;/##CHR(13)##//##CHR(10)##/ chequeNumber = МассаКВПЭTransaction.ReceiptNumber;/##CHR(13)##//##CHR(10)##/ Seller = МассаКВПЭTransaction.OperatorID;/##CHR(13)##//##CHR(10)##/ wareCode = МассаКВПЭTransaction.GoodsID;/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = МассаКВПЭTransaction.Price / 100.00;/##CHR(13)##//##CHR(10)##/ Quantity = ЕСЛИ( ЗАПРОС( "SELECT f_weight FROM spredn WHERE code= (SELECT ed FROM sprnn WHERE maincode = ''" + STR( warecode ) + "'' )" ), /##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.Weight / 1000.00, МассаКВПЭTransaction.Quantity );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = МассаКВПЭTransaction.WorkShiftNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Price * ( 100.00 + МассаКВПЭTransaction.Discount ) / 100;/##CHR(13)##//##CHR(10)##/ SummWD = PriceWD * Quantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ barcode = МассаКВПЭTransaction.barcode;/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = МассаКВПЭTransaction.ContractorID;/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ sklad = RIGHT( "000" + STR( МассаКВПЭTransaction.OperatingStoreID ), 3 );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЗАПРОС( "SELECT code FROM sprskl WHERE code = ''" + sklad + "''" ) ) )/##CHR(13)##//##CHR(10)##/ sklad = kkmsklad;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = ЕСЛИ( tranzType == 41, -1, 1 ) * VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( tranzType == 73 AND ВСПИСКЕ( ИСТОЧНИКДАТЫ, 3, 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##//* IF ( ВСПИСКЕ( tranzType, 71, 72 ) AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE code= ''" + RIGHT( "0000000" + STR( VAL( documentClient ) ), 7 ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranzType, 1, 2, 3, 4, 5, 6, 41 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = ЕСЛИ( tranzType == 2, "001", ЕСЛИ( tranzType == 3, "002", ЕСЛИ( ВСПИСКЕ( tranzType, 1, 4, 41 ), "008", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( tranzType == 5, "007", ЕСЛИ( tranzType == 6, "003", ЕСЛИ( tranzType == 5, "007", "008" ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( documentClient != 0 )/##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE code= ''" + RIGHT( "0000000" + STR( VAL( documentClient ) ), 7 ) + "''" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, kkmfirm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + barcode + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ МассаКВПЭTransaction.GetNext( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'20.03.2018 10:16:12') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Масса-К Driver-R Весы регистраторы (режим ККМ)','ККМ',0.00000000,'',0.00000000,6637.00000000,0,'',0.00000000,'','',0,'FA8966C5-A806-4396-BC7D-263DF5B0215F',0,1,0,'20.03.2018 10:16:12') #begin #description Масса-К Driver-R Весы с печатью этикеток #name Масса-К Driver-R Весы с печатью этикеток #code 0000000090 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТСООБЩЕНИЯОБОШИБКЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN _КОДСООБШЕНИЯОБОШИБКЕ <> 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice, МассаКВПЭGoods;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если объекты драйвера созданы, то удаляем их, чтобы не мешали/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФОРМА = ФОРМА( "МАССАК:СвойстваДрайвера", "001" );/##CHR(13)##//##CHR(10)##/Форма.CreateSimple( КОДОБОРУДОВАНИЯ ); /##CHR(13)##//##CHR(10)##/Форма.Show( );/##CHR(13)##//##CHR(10)##/Форма.DoModal( true );/##CHR(13)##//##CHR(10)##/Форма = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В драйвере Масса-К нет возможности установить индекс устройства, поэтому, в цикле отсчитываем нужное количество раз/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/Номер = 0;/##CHR(13)##//##CHR(10)##/WHILE ( МассаКВПЭDriver.ResultCode == 0 AND Номер < ИНДЕКСУСТРОЙСТВА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( );/##CHR(13)##//##CHR(10)##/ Номер++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( МассаКВПЭDriver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = МассаКВПЭDevice.name + " (" + МассаКВПЭDevice.connection + ")";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В драйвере Масса-К нет возможности установить индекс устройства, поэтому, в цикле отсчитываем нужное количество раз/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/WHILE ( МассаКВПЭDriver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОУСТРОЙСТВ++;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'//Окончание работы с ВЕСАМИ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC МассаКВПЭDriver, МассаКВПЭDevice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Driver", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Device", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Goods", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "МассаКВПЭDriver" ) != "O" OR ТИП( "МассаКВПЭDevice" ) != "O" OR ТИП( "МассаКВПЭGoods" ) != "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = -1;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code =''" + КОДОБОРУДОВАНИЯ + "''" ) + ": Не удалось создать объект драйвера.";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetFirst( );/##CHR(13)##//##CHR(10)##/ Номер = НОМЕРУСТРОЙСТВА - 1;/##CHR(13)##//##CHR(10)##/ // Выбираем нужное устройство/##CHR(13)##//##CHR(10)##/ ПОКА ( Номер > 0 && МассаКВПЭDriver.ResultCode == 0 ) /##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.GetNext( ); /##CHR(13)##//##CHR(10)##/ Номер = Номер - 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode < 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) МассаКВПЭDevice.DeleteGoods( );/##CHR(13)##//##CHR(10)##/// Подаем команду начала выгрузки в весы (очищаем буфер объекта)/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вместо PLU используем код товара, т.к. продавать должны уметь все выгружаемые товары/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT maincode, name, CASE WHEN (SELECT f_weight FROM spredn WHERE code= s.ed) = 1 THEN 0 ELSE 1 END AS waretype, store_period, /##CHR(13)##//##CHR(10)##/ weight * CASE WHEN ed_weight = ''кг'' THEN 1000000 ELSE 1000 END AS UnitWeight, ed,/##CHR(13)##//##CHR(10)##/ (SELECT LEFT( bctemplate, 2 ) FROM spredn WHERE code = s.ed ) AS prefix/##CHR(13)##//##CHR(10)##/ FROM sprnn s WHERE maincode =''" + STDF( КОД ) + "''", "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.ID = VAL( КОД );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Code = КОД;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Name = НАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.GoodsTypeID = ТоварИнфо.wareType;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Price = ЦЕЛОЕ( ЦЕНА * 100 );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.GroupCode = 0;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.TarеWeight = 0;/##CHR(13)##//##CHR(10)##/IF ( МассаКВПЭGoods.GoodsTypeID == 1 ) // Для штучного товара передаем вес единицы/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.UnitWeight = ТоварИнфо.UnitWeight;/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКВЫВОДИТЬКОММЕНТАРИИ )/##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.Ingredients = LEFT( ПРИМЕЧАНИЕ, 1000 );/##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.store_period != 0 ) /##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.BestBefore = ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДОБАВИТЬДНИ( ДАТА( ), ТоварИнфо.store_period ), 0 ), ".", "-" ), " ", "-" );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.ShelfLife = ТоварИнфо.store_period * 1440;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Barcode = ЗАПРОС( "SELECT bc FROM sprnnbc WHERE nn = ''" + ТОВАР + "'' ORDER BY identity_column " );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.PLU = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.BasicUnit = LEFT( ТоварИнфо.ed, 5 );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.prefix ) ) /##CHR(13)##//##CHR(10)##/ МассаКВПЭGoods.BarcodePrefix= VAL( ТоварИнфо.prefix );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭGoods.Add( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Завершение выгрузки товаров в ККМ. Передаем данные в оборудование и закррываем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteType = 1;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/МассаКВПЭDevice.WriteGoods( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/TRY/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если указано, что надо выгружать склады, то выгружаем их/##CHR(13)##//##CHR(10)##/ IF ( VAL( ЗАПРОС( "SELECT value FROM param WHERE param = ''ВыгружатьСклад" + КОДОБОРУДОВАНИЯ + "''" ) ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.DeleteStore( );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Store", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Clear( );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprskl WHERE folder = 0 AND notavail = 0", "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ ПОКА( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.ID = VAL( СписокСкладов.code );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Code = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Name = LEFT( СписокСкладов.name, 100 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭStore.Add( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteType = 0;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteStore( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) THROW;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если указано, что надо выгружать контрагентов, то выгружаем их/##CHR(13)##//##CHR(10)##/ IF ( VAL( ЗАПРОС( "SELECT value FROM param WHERE param = ''ВыгружатьКонтрагента" + КОДОБОРУДОВАНИЯ + "''" ) ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.DeleteContractor( );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor = СОЗДАТЬОБЪЕКТ( "TerminalMassaK.Contractor", 1 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Clear( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprclient WHERE folder = 0 AND notavail = 0", "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ ПОКА( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.ID = VAL( code );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Code = code;/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Name = LEFT( name, 100 );/##CHR(13)##//##CHR(10)##/ МассаКВПЭContractor.Add( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteType = 0;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.Mark = 1;/##CHR(13)##//##CHR(10)##/ МассаКВПЭDevice.WriteContractor( );/##CHR(13)##//##CHR(10)##/ _ERROR = МассаКВПЭDriver.ResultCode != 0;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ТЕКСТСООБЩЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultDescription;/##CHR(13)##//##CHR(10)##/_КОДСООБШЕНИЯОБОШИБКЕ = МассаКВПЭDriver.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКВПЭDevice = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭDriver = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭGoods = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭStore = false;/##CHR(13)##//##CHR(10)##/МассаКВПЭContractor = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,0,0,'24.10.2016 14:07:56') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Масса-К Driver-R Весы с печатью этикеток','ВЕСЫ',0.00000000,'',0.00000000,137.00000000,0,'',0.00000000,'','',0,'62CA952E-111D-4A6F-91B7-CA3F9F8F3740',0,1,0,'09.11.2016 12:47:30') #begin #description Загрузка из алко журнала ЕГАИС #name Загрузка из алко журнала ЕГАИС #code 0000000093 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, т.к. ничего проверять не требуется/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmfirm = firm;/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = ЗАПРОС( "SELECT MAX( tranzcount ) FROM frontol__tranzt" ); // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''.");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создадим контекст для загрузки csv файла/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT SPACE( 5 ) AS npp, CONVERT( datetime, '''' ) AS date, SPACE( 100 ) AS barcode, /##CHR(13)##//##CHR(10)##/ SPACE( 250 ) AS name, SPACE( 10 ) AS nnvid, CONVERT( float, 0 ) AS vol, CONVERT( float, 0 ) AS kolp", "Данные", 1 );/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Данные", "CSV", ИмяФайла, ";" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Данные" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "Данные" ) ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КОЛИЧЕСТВОСТРОК( "Данные" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "Данные" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "Данные" ), "Обработано строк " + НОМЕРСТРОКИ( "Данные" ) + " из " + КОЛИЧЕСТВОСТРОК( "Данные" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Данные.kolp ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzDate = Данные.date;/##CHR(13)##//##CHR(10)##/ nnname = Данные.name;/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ // Если не удалось найти товар по названию, и есть номер марки, то пробуем по алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Данные.barcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкокодИзМарки( Данные.barcode );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE cat = ''001'' AND name = ''" + STDF( Данные.name ) + "'' AND ROUND( d_litr, 2 ) = " + STR( Данные.vol, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ wareCode = ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ tranzCount = ЗАПРОС( "SELECT tranzcount FROM frontol__tranzt WHERE equipment = ''" + КОДОБОРУДОВАНИЯ + "'' AND DATEDIFF( day, tranzdate, ''" + tranzDate + "'' ) = 0 AND warecode= ''" + warecode + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ tranzCount = maxTranzCount + 1;/##CHR(13)##//##CHR(10)##/ Quantity = Данные.kolp;/##CHR(13)##//##CHR(10)##/ tranzTime = "";/##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ POSNumber = 0;/##CHR(13)##//##CHR(10)##/ chequeNumber = "0";/##CHR(13)##//##CHR(10)##/ Seller = "0";/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = ЗАПРОС ( "SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + sklad + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = 0;/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = PriceWD * Quantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ barcode = Данные.barcode;/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ date = tranzDate;/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = Quantity;/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, kkmfirm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + barcode + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "Данные" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = "";/##CHR(13)##//##CHR(10)##/РучнойОбмен = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФАЙЛНАЙТИ( СЖАТЬПРОБЕЛЫ( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'27.10.2016 14:04:48') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Загрузка из алко журнала ЕГАИС','ККМ',0.00000000,'',0.00000000,146.00000000,0,'',0.00000000,'','',0,'673F3060-0653-4750-ACA1-73CE1F11F3C9',0,1,0,'09.11.2016 12:47:36') #begin #description Обмен данными с Эвотор #name Обмен данными с Эвотор #code 0000000094 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, "##@@&&" + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, "#" + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, "$$$DELETEALLWARES" + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) + CHR( 10 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( Строка, "ANSI", "UTF-8" ) + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr, a_proc/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) );/##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STRTRAN( STR( cena, 8, 2 ), ".", delimiter ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STRTRAN( STR( min_cena, 8, 2 ), ".", delimiter ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STRTRAN( STR( kolp, 10, 3 ), ".", delimiter ) );/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/mEdn = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !_ВЫГРУЖАТЬАЛКОГОЛЬ )/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";;;0;;" + mEdn + ";" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, REPLICATE( ";", 30 ) + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( Строка, "ANSI", "UTF-8" ) + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, "$$$ADDBARCODES" + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( Строка, "ANSI", "UTF-8" ) + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( fileHandle, commands + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ // Опыт показал, что первая строка заканчивается OD + 0A/##CHR(13)##//##CHR(10)##/ //checkResult = ФайлПрочитать( Файл, "S", 1024, CHR( 10 ) ) == "#";/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписать( fileHandle, "@" + CHR( 10 ) );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ПЕРЕКОДИРОВАТЬ( ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) ), "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", "008" )))))))) );/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:39:00') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Эвотор','ККМ',0.00000000,'',0.00000000,6731.00000000,0,'',0.00000000,'','',0,'3C114715-A9E8-488F-8797-6732BA8306CA',0,1,0,'26.12.2018 16:38:59') #begin #description Сканер ШК для добавления товара в дополнительных единицах #name Сканер ШК для добавления товара в дополнительных единицах #code 0000000095 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',61.00000000,'//Чтение штрихового кода СКАНЕРОМ ШК в документе./##CHR(13)##//##CHR(10)##/// Если прочитали штрихкод в приходной накладной, то ищем его среди товаров накладной/##CHR(13)##//##CHR(10)##/// Если находим, то увеличиваем количество на 1/##CHR(13)##//##CHR(10)##/_DODEFAULT = true; // По умолчанию стандартная обработка/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Коэффициент = ЗАПРОС( "SELECT koef FROM sprres_ed WHERE barcode = ''" + ШТРИХКОД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Коэффициент ) ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "НАЙТИ", " nn = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ IF ( _СТРОКАНАЙДЕНА ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp", _ЗНАЧЕНИЕПОЛЯ + Коэффициент );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT nn, maincode, code, name, kodn, ed, /##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_incena( nn, '''', ''" + sklad + "'', ''001'') AS incena,/##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_cena( nn, '''', ''" + sklad + "'', ''001'') AS cena/##CHR(13)##//##CHR(10)##/ FROM sprnn WHERE nn= ''" + Товар + "''", "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Цена = ЕСЛИ( @КодДокумента != "001", ТоварИнфо.cena, ТоварИнфо.incena );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATECELL", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ДобавитьСтроку" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nn", ТоварИнфо.nn );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "a_code", ТоварИнфо.code );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "maincode", ТоварИнфо.maincode );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nnname", ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kodn", ТоварИнфо.kodn );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "ed", ТоварИнфо.ed );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_c", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_e", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "realkolp", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, ЕСЛИ( @КодДокумента != "007", "kolp", "kolp_real" ), Коэффициент );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena", Цена );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "summa", Цена * Коэффициент );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "showcena", Цена );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "showsumma", Цена * Коэффициент );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATEGRID" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATECELL", "Кол-во" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'09.11.2016 16:09:29') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для добавления товара в дополнительных единицах','СКАНЕР',0.00000000,'',0.00000000,76.00000000,0,'',0.00000000,'','',0,'436D3DA4-40AC-468A-A7D4-8ECE14073EB9',0,1,0,'09.11.2016 16:09:35') #begin #description Профиль ТСД Data Mobile #name Профиль ТСД Data Mobile #code 0000000099 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0;/##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS clientname, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS clientname, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS clientname, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( ";;;;Производитель;ПроизводительАлкоголя;ОбъемАлкоголь;СодержаниеСпирта;ВидАлкогольнойПродукции;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.clientname, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";;;;;" + Производитель + ";" + /##CHR(13)##//##CHR(10)##/ Производитель + ";" + Объем + ";" + Крепость + ";" + ВидПродукции + ";;" + Остаток + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + ШтрихКод + ";" + Единица + ";1;" + КодТовара, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'25.12.2016 22:44:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'/##CHR(13)##//##CHR(10)##/// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'25.12.2016 22:44:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Data Mobile";',0,0,1,0,'25.12.2016 22:44:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'25.12.2016 22:44:45') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile','ТСД',0.00000000,'',0.00000000,156.00000000,0,'',0.00000000,'','',0,'4EF1BCE3-D7FB-4520-9143-E0706340B517',0,1,0,'25.12.2016 22:44:45') #begin #description Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров #name Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров #code 0000000100 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN "МАССА-К ВМП";',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ФайлМассаК, МассаКИмяФайла;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',49.00000000,'/##CHR(13)##//##CHR(10)##///Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыводитьСообщения = ЗАПРОС( "SELECT f_messages FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ПРИЗНАКОЧИСТКИВЕСОВ = true;/##CHR(13)##//##CHR(10)##/КодГруппыВесов = ЗАПРОС( "SELECT MIN( code ) AS code FROM sprnnweights WHERE eq_code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/КатегорияЦены = ЗАПРОС( "SELECT clev FROM sprskl WHERE code = ( SELECT sklad FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'')" );/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE, ОШИБКАДРАЙВЕРА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то сформируем файл с командой удаления всех товаров/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ( "ScalesCommunications.exe", "ERASE 1 0", "", "open", 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКИмяФайла = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/// Создаем файл для записи в него выгружаемых товаров/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/Строка = "PLU;TYPE;LABEL_NUMBER;BARCODE_NUMBER;BARCODE_PREFIX;PRICE;TARE;CODE;BEST_BEFORE;SHELF_LIFE;CERTIFICATE;GROUP;CENTERING;NAME;CONTENT;INFO_TYPE;INFO";/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ Для расчета максимального срока годности по приходам надо заменить расчет СРОКГОДНОСТИ на такой/##CHR(13)##//##CHR(10)##/ (SELECT DATEDIFF( day, GETDATE( ), MAX( date_ex ) ) FROM spec001 WHERE nn= s.nn ) AS СРОКГОДНОСТИ,/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT w.code, w.nn, s.maincode AS КОД, s.note AS ПРИМЕЧАНИЕ, s.name AS НАИМЕНОВАНИЕ, w.plu AS ПЛУ, /##CHR(13)##//##CHR(10)##/ s.store_period AS СРОКГОДНОСТИ, /##CHR(13)##//##CHR(10)##/ CASE WHEN ( SELECT f_weight FROM spredn WHERE code= s.ed ) = 1 THEN 0 ELSE 1 END AS ВЕСОВОЙ, s.note,/##CHR(13)##//##CHR(10)##/ dbo.fn_calcclev_cena( s.nn, '''', ''" + КатегорияЦены + "'', ''001'') AS ЦЕНА/##CHR(13)##//##CHR(10)##/ FROM sprnnweights w /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn s /##CHR(13)##//##CHR(10)##/ ON w.nn = s.nn /##CHR(13)##//##CHR(10)##/ WHERE w.nn <> '''' AND w.code = ''" + КодГруппыВесов + "'' AND w.plu <> ''''/##CHR(13)##//##CHR(10)##/ ORDER BY w.code, s.name ", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/ IF ( EMPTY( ПЛУ ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Убираем из наименования и примечания символы, которые не понимает программа МАССА-К/##CHR(13)##//##CHR(10)##/ НАИМЕНОВАНИЕ= ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( НАИМЕНОВАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ПРИМЕЧАНИЕ = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ПРИМЕЧАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ Для выгрузки максимального срока годности по приходам надо заменить строку на такую/##CHR(13)##//##CHR(10)##/ Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СРОКГОДНОСТИ > 0, DTOC( ДАТА( ) + СРОКГОДНОСТИ ), "" ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;"; /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/ Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ DTOC( ДАТА( ) + СРОКГОДНОСТИ ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем строку в файл/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка ) ;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##/ВЫПОЛНИТЬ( "ScalesCommunications.exe", "WRITE 1 " + МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.08.2018 10:06:34') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров','ВЕСЫ',0.00000000,'',0.00000000,158.00000000,0,'',0.00000000,'','',0,'978606B8-7484-4955-84EF-9BBF73AE3623',0,1,0,'08.08.2018 10:06:34') #begin #description Обмен данными с Эвотор через Excel #name Обмен данными с Эвотор через Excel #code 0000000103 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Полная выгрузка товаров в Excel./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + Товары, "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Add( );/##CHR(13)##//##CHR(10)##///MSExcel.Visible = true;/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Выводим строки заголовки/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 1, 1 ].Value = "name";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 2, 1 ].Value = "code";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 3, 1 ].Value = "measureName";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 4, 1 ].Value = "tax";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 5, 1 ].Value = "allowToSell";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 6, 1 ].Value = "description";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 7, 1 ].Value = "articleNumber";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 8, 1 ].Value = "parentCode";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 9, 1 ].Value = "group";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 10, 1 ].Value = "type";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 11, 1 ].Value = "price";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 12, 1 ].Value = "costPrice";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 13, 1 ].Value = "quantity";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 14, 1 ].Value = "barCodes";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 15, 1 ].Value = "alcoCodes";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 16, 1 ].Value = "alcoholByVolume";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 17, 1 ].Value = "alcoholProductKindCode";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 18, 1 ].Value = "tareVolume";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекущаяСтрока = 2;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 1, ТекущаяСтрока ].Value = LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100 );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 2, ТекущаяСтрока ].Value = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 5, ТекущаяСтрока ].Value = 1;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 8, ТекущаяСтрока ].Value = ALLTRIM( STR( ЕСЛИ( ПУСТО( parent ), "", ABS( parent ) + ЕСЛИ( parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 9, ТекущаяСтрока ].Value = 1;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 10, ТекущаяСтрока ].Value = "NORMAL";/##CHR(13)##//##CHR(10)##/ ТекущаяСтрока ++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ OR cena > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 1, ТекущаяСтрока ].Value = LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100 );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 2, ТекущаяСтрока ].Value = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 4, ТекущаяСтрока ].Value = ЕСЛИ( kodn == "04", 18, ЕСЛИ( kodn == "05", 0, ЕСЛИ( kodn == "01", 10, 0 ) ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 5, ТекущаяСтрока ].Value = 1;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 6, ТекущаяСтрока ].Value = ALLTRIM( note );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 7, ТекущаяСтрока ].Value = ALLTRIM( article );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 8, ТекущаяСтрока ].Value = ALLTRIM( STR( ЕСЛИ( ПУСТО( parent ), "", ABS( parent ) + ЕСЛИ( parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 9, ТекущаяСтрока ].Value = 0;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 10, ТекущаяСтрока ].Value = "NORMAL";/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 11, ТекущаяСтрока ].Value = ALLTRIM( STR( cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 12, ТекущаяСтрока ].Value = ALLTRIM( STR( cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 13, ТекущаяСтрока ].Value = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 14, ТекущаяСтрока ].Value = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN cat = ''001'' THEN dbo.fn_fullnnname( code ) ELSE name END AS name, nnvid, d_litr, a_proc, ed/##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 3, ТекущаяСтрока ].Value = "шт"; //ALLTRIM( ТоварИнфо.ed );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 16, ТекущаяСтрока ].Value = mAProc;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 17, ТекущаяСтрока ].Value = mNNVid;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 18, ТекущаяСтрока ].Value = mVolume;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекущаяСтрока ++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.SaveAs( path_out );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФАЙЛНАЙТИ( СЖАТЬПРОБЕЛЫ( path_in ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/kkmfirm = firm;/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Open( ИмяФайла );/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Определяем размеры матрицы/##CHR(13)##//##CHR(10)##/rowCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].ROW;/##CHR(13)##//##CHR(10)##/columnCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].COLUMN;/##CHR(13)##//##CHR(10)##/curY = 2;/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Чтение файла с данными.", rowCount );/##CHR(13)##//##CHR(10)##/WHILE ( curY < rowCount )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( curY, "Прочитано " + curY + " из " + rowCount );/##CHR(13)##//##CHR(10)##/ curY++;/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzCount = cMSEDS.Cells[ 1, curY ].Value;/##CHR(13)##//##CHR(10)##/ tranzDate = ДАТА( );/##CHR(13)##//##CHR(10)##/ tranzTime = ДАТА( );/##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ POSNumber = "1";/##CHR(13)##//##CHR(10)##/ chequeNumber = "1";/##CHR(13)##//##CHR(10)##/ Seller = "0";/##CHR(13)##//##CHR(10)##/ wareCode = STR( INT( VAL( cMSEDS.Cells[ 2, curY ].Value ) ) );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = cMSEDS.Cells[ 6, curY ].Value + cMSEDS.Cells[ 7, curY ].Value;/##CHR(13)##//##CHR(10)##/ Quantity = cMSEDS.Cells[ 4, curY ].Value;/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = Price * Quantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ firm = kkmfirm;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = cMSEDS.Cells[ 3, curY ].Value;/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = cMSEDS.Cells[ 7, curY ].Value;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( ПУСТО( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ), kkmfirm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzCount ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.Close( false );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:40:24') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Эвотор через Excel','ККМ',0.00000000,'',0.00000000,163.00000000,0,'',0.00000000,'','',0,'87F3438F-8955-4EEC-A6A5-5E82203E2F40',0,1,0,'26.12.2018 16:40:24') #begin #description Профиль Мёбиус (драйвер OPOS) #name Профиль Мёбиус (драйвер OPOS) #code 0000000101 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKMSP101;/##CHR(13)##//##CHR(10)##/ПОРЯДОКПАРАМЕТРОВ( false );/##CHR(13)##//##CHR(10)##/driverKKMSP101 = СоздатьОбъект( "OPOS.FiscalPrinter", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKMSP101") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.Open("MbsFiscalPrinter") <> 0;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.Claimed )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.ClaimDevice( 1000 );/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.DeviceEnabled )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не получилось активировать устройство, то возвращаем ошибку/##CHR(13)##//##CHR(10)##/_ERROR = !driverKKMSP101.DeviceEnabled;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 1 - номер смены/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##//*ТипЗапроса = "0";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.GetData( 7, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );*/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 7 - номер чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##//*ТипЗапроса = "0";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.GetData( 3, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );*/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, "Открытие смены " + STR( НомерСмены ) ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, Заголовок ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndNonFiscal( )/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.DirectIO( 6, VAL( ЗАПРОС( "SELECT maincode FROM sprempl WHERE code= ''" + froperator + "''" ) ), ЗАПРОС( "SELECT name FROM sprempl WHERE code= ''" + froperator + "''" ) );/##CHR(13)##//##CHR(10)##/// Необходимо передать в ФР таблицу налогов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( " SELECT list.code, kodn.proc_ /##CHR(13)##//##CHR(10)##/ FROM sprkodn kodn /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn list ON CHARINDEX( kodn.code , list.list ) > 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlistkodn ON sprlistkodn.code = list.code/##CHR(13)##//##CHR(10)##/ WHERE list.date = (SELECT MAX( date ) FROM speclistkodn WHERE code = list.code) AND kodn.proc_ > 0", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKMSP101.SetVatValue( VAL( СписокНалогов.code ) , STR( СписокНалогов.proc_ * 10 ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKMSP101.SetVatTable( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 1; // 1- FPTR_RT_CASH_IN, 2 - FPTR_RT_CASH_OUT/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма * 100 );/##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( Сумма * 100, Сумма * 100, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 2; // 2 - FPTR_RT_CASH_OUT, 1- FPTR_RT_CASH_IN/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма * 100 );/##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( Сумма * 100, Сумма * 100, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = ЕСЛИ( ТИПЧЕКА == 1, 5, 4 ); // 4- FPTR_RT_SALES, 5- FPTR_RT_SERVICE/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/FOR ( index = 1; index < 16; index ++ ) _НАЛОГИ[ index ] = 0;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = VAL( ЗАПРОС( "SELECT kodn FROM sprres WHERE code = ''" + Товар + "''" ) );/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена * 100, Количество * 1000, КодНалога, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, КодНалога );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, КодНалога );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки * 100, КодНалога );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки * 100, КодНалога );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена * 100, Количество * 1000, КодНалога, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_НАЛОГИ[ VAL( КодНалога ) ] += СуммаНДС;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/КодНалога = VAL( ЗАПРОС( "SELECT kodn FROM sprres WHERE code = ''" + Товар + "''" ) );/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена * 100, Количество * 1000, КодНалога, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, КодНалога );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, КодНалога );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки * 100, КодНалога );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки * 100, КодНалога );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена * 100, Количество * 1000, КодНалога, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_НАЛОГИ[ VAL( КодНалога ) ] -= СуммаНДС;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки * 100 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки * 100 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо установить номер печатаемого чека/##CHR(13)##//##CHR(10)##/НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##/driverKKMSP101.DirectIO( 3, НомерЧека, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Передаем суммы налогов в ФР/##CHR(13)##//##CHR(10)##///FOR ( index = 1; index < 16; index ++ )/##CHR(13)##//##CHR(10)##/// driverKKMSP101.DirectIO( 2, index, STR( _НАЛОГИ[ index ] * 100 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ * 100, СУММАОПЛАТЫ * 100, "na" );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки * 100 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки * 100 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо установить номер печатаемого чека/##CHR(13)##//##CHR(10)##/НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##/driverKKMSP101.DirectIO( 3, НомерЧека, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ * 100, СУММАОПЛАТЫ * 100, "na" );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 40;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.printNormal( 2, Строка ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##///driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.EndNonFiscal( )',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintXReport( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET ecrsession= ecrsession + 1 WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintZReport( );',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Печать отчета по НДС за период/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НАЧАЛОПЕРИОДА ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Необходимо указать период, для формирования отчета." );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекущаяДата = НАЧАЛОПЕРИОДА;/##CHR(13)##//##CHR(10)##/ИтогоВсего = 0.00;/##CHR(13)##//##CHR(10)##/ИтогоВсегоНДС = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( " SELECT list.code, kodn.proc_ /##CHR(13)##//##CHR(10)##/ FROM sprkodn kodn /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn list ON CHARINDEX( kodn.code , list.list ) > 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlistkodn ON sprlistkodn.code = list.code/##CHR(13)##//##CHR(10)##/ WHERE list.date = (SELECT MAX( date ) FROM speclistkodn WHERE code = list.code) AND kodn.proc_ > 0", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИТОГОНДС[ VAL( СписокНалогов.code ) ] = 0.00;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( ТекущаяДата <= КОНЕЦПЕРИОДА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Сначала необходимо рассчитать суммы налогов за день/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ ВсегоПродаж = ЗАПРОС( "SELECT SUM( CASE WHEN chequetype = 1 THEN -summwd ELSE summwd END ) /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt /##CHR(13)##//##CHR(10)##/ WHERE equipment =''" + ФРКОДОБОРУДОВАНИЯ + "'' AND tranztype IN ( 1, 11 ) AND DATEDIFF( day, tranztime, ''" + ТекущаяДата + "'' ) = 0 " );/##CHR(13)##//##CHR(10)##/ ВсегоНДС = 0.00;/##CHR(13)##//##CHR(10)##/ ИтогоВсего += ВсегоПродаж;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Индекс = VAL( СписокНалогов.code );/##CHR(13)##//##CHR(10)##/ Продажи = ЗАПРОС( "SELECT SUM( CASE WHEN ft.chequetype = 1 THEN -ft.summwd ELSE ft.summwd END ) /##CHR(13)##//##CHR(10)##/ FROM frontol__tranzt ft/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON ft.warecode = dbo.fn_chartoint( sprres.maincode )/##CHR(13)##//##CHR(10)##/ WHERE ft.equipment =''" + ФРКОДОБОРУДОВАНИЯ + "'' AND ft.tranztype IN ( 1, 11 ) AND DATEDIFF( day, ft.tranztime, ''" + ТекущаяДата + "'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ sprres.kodn = ''" + СписокНалогов.code + "''" );/##CHR(13)##//##CHR(10)##/ НДС[ Индекс ] = ( Продажи * СписокНалогов.proc_ ) / ( 100 + СписокНалогов.proc_ );/##CHR(13)##//##CHR(10)##/ ИТОГОНДС[ Индекс ] /##CHR(13)##//##CHR(10)##/ += НДС[ Индекс ];/##CHR(13)##//##CHR(10)##/ ВсегоНДС += НДС[ Индекс ];/##CHR(13)##//##CHR(10)##/ ИтогоВсегоНДС += НДС[ Индекс ];/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, REPLICATE( "=", 8 ) + " " + DTOC( ТекущаяДата, 4 ) + " " + REPLICATE( "=", 8 ) ); /##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, PADR( "JEMI:", 15 ) + PADL( STR( ВсегоПродаж, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, PADR( "JEMI GBS-syz:", 15 ) + PADL( STR( ВсегоПродаж - ВсегоНДС, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, PADR( "JEMI GBS:", 15 ) + PADL( STR( ВсегоНДС, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, PADR( "GBS " + STR( СписокНалогов.proc_ ) + "%", 15 ) + PADL( STR( НДС[ VAL( СписокНалогов.code ) ], 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДОБАВИТЬДНИ( ТекущаяДата, 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, REPLICATE( "=", 8 ) + "UMUMY JEMI" + " " + REPLICATE( "=", 8 ) ); /##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, PADR( "JEMI:", 15 ) + PADL( STR( ИтогоВсего, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, PADR( "JEMI GBS-syz:", 15 ) + PADL( STR( ИтогоВсего - ИтогоВсегоНДС, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, PADR( "JEMI GBS:", 15 ) + PADL( STR( ИтогоВсегоНДС, 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printNormal( 2, PADR( "GBS " + STR( СписокНалогов.proc_ ) + "%", 15 ) + PADL( STR( ИТОГОНДС[ VAL( СписокНалогов.code ) ], 15, 2 ), 15 ) ); /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.EndNonFiscal( );',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипЗапроса = "1";/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN VAL( ТипЗапроса );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/ RETURN driverKKMSP101.DayOpened;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode <> 0;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "СП101ФР-К";',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Сообщение("Для настройки драйвера запустите служебную утилиту OPOSConfog.exe");/##CHR(13)##//##CHR(10)##/',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Мёбиус";',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );/##CHR(13)##//##CHR(10)##/// Закрываем драйвер/##CHR(13)##//##CHR(10)##/driverKKMSP101.Close( )/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.errorMessage;',0,0,0,0,'01.03.2017 13:01:58') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль Мёбиус (драйвер OPOS)','ФР',0.00000000,'',0.00000000,160.00000000,0,'',0.00000000,'','',0,'6156F41A-B125-494D-919D-CD9C6C7C719F',0,1,0,'01.03.2017 13:01:58') #begin #description Профиль СП101ФР-К (драйвер OPOS) ФН #name Профиль СП101ФР-К (драйвер OPOS) ФН #code 0000000107 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "СП101ФР-К";',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );/##CHR(13)##//##CHR(10)##/// Закрываем драйвер/##CHR(13)##//##CHR(10)##/driverKKMSP101.Close( )/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKMSP101;/##CHR(13)##//##CHR(10)##/driverKKMSP101 = СоздатьОбъект( "OPOS.FiscalPrinter", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKMSP101") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.Open("SPFR101") <> 0;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.Claimed )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.ClaimDevice( 1000 );/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.DeviceEnabled )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не получилось активировать устройство, то возвращаем ошибку/##CHR(13)##//##CHR(10)##/_ERROR = !driverKKMSP101.DeviceEnabled;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKMSP101.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKMSP101.ReleaseDevice( );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 1 - номер смены/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/ТипЗапроса = "1";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xA5 (165), Тип запроса 7 - номер чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/ТипЗапроса = "7";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( ТипЗапроса );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, "Открытие смены " + STR( НомерСмены ) ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.printNormal( 2, Заголовок ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndNonFiscal( )/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 1; // 1- FPTR_RT_CASH_IN, 2 - FPTR_RT_CASH_OUT/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 2; // 2 - FPTR_RT_CASH_OUT, 1- FPTR_RT_CASH_IN/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintRecCash( Сумма );/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKMSP101.FiscalReceiptType = 4; // 4- FPTR_RT_SALES/##CHR(13)##//##CHR(10)##/driverKKMSP101.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKMSP101.DeviceIO( 185, 1008, ПОЧТА );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKMSP101.DeviceIO( 185, 1021, _ИМЯКАССИРА );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( !driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 3, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 4, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 1, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItemAdjustment( 2, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если установками указано, что скидки надо печатать после основной записи, /##CHR(13)##//##CHR(10)##/// то печатаем основную запись/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapOrderAdjustmentFirst )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // В стандартной конфигурации в количестве 3 знака после запятой /##CHR(13)##//##CHR(10)##/ // Количество представлено целым числом, поэтому необходимо умножить на 1000/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecItem( Наименование, Цена, Количество*1000, 0, 0, Единица );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ, СУММАОПЛАТЫ, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKMSP101.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 3, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 4, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKMSP101.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 1, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKMSP101.printRecSubtotalAdjustment( 2, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.printRecTotal( СУММАРЕГИСТРАЦИИ, СУММАОПЛАТЫ, "1");/##CHR(13)##//##CHR(10)##/driverKKMSP101.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 40;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.printNormal( 2, Строка ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.ResetPrinter( );/##CHR(13)##//##CHR(10)##///driverKKMSP101.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKMSP101.EndNonFiscal( )',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintXReport( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKMSP101.PrintZReport( );',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипЗапроса = "1";/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKMSP101.DeviceIO( 0xA5, 0, @ТипЗапроса ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN VAL( ТипЗапроса );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.errorMessage;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorCode <> 0;',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "СП101ФР-К";',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Сообщение("Для настройки драйвера запустите служебную утилиту OPOSConfog.exe");/##CHR(13)##//##CHR(10)##/',0,0,0,0,'24.03.2017 12:37:37') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль СП101ФР-К (драйвер OPOS) ФН','ФР',0.00000000,'',0.00000000,171.00000000,0,'',0.00000000,'','',0,'1D0CB8FA-3758-46C5-8EBE-DF6C77382FA5',0,1,0,'24.03.2017 12:37:37') #begin #description Профиль ФР Штрих-онлайн (ФН) v.3 #name Профиль ФР Штрих-онлайн (ФН) v.3 #code 0000000110 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЕГАИСURL = ЕгаисUrl.url;/##CHR(13)##//##CHR(10)##/ ЕГАИСSIGN = ЕгаисUrl.sign;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( ЕГАИС_ОТВЕТ );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ЕГАИС_ОТВЕТ;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Print2DBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСURL;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСSIGN;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##///driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##///driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##///driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/// 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/// 2 - имя кассира/##CHR(13)##//##CHR(10)##/// 3 - система налогообложения/##CHR(13)##//##CHR(10)##///driverKKM.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##///driverKKM.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##///IF ( driverKKM.Value == 1 )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = 1021;/##CHR(13)##//##CHR(10)##/ driverKKM.TagType = 7; //строка/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = 18;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = 5;/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##///ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##///PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##///ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Печать может производиться на несколько ФР. Поэтому надо выбрать нужный и к нему подключиться/##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = НОМЕРУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаСоСкидкой;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = 0;//ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'18.05.2017 17:22:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих-онлайн (ФН) v.3','ФР',0.00000000,'',0.00000000,476.00000000,0,'',0.00000000,'','',0,'EAB01542-CE3C-40A6-BC5E-AE89CF3F41E1',0,1,0,'18.05.2017 17:22:21') #begin #description Обмен данными с Фронтол Менеджер 3 #name Обмен данными с Фронтол Менеджер 3 #code 0000000113 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/ИДПодразделения = ЗАПРОС( "SELECT ex_code FROM sprbranch WHERE code = (SELECT branch FROM sprskl WHERE code = ''" + ALLTRIM( sklad ) + "''" );/##CHR(13)##//##CHR(10)##/ИДГруппыДанных = ИДПодразделения;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" + ИДПодразделения );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ barcode = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF(ПУСТО(karta))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + barcode + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" ); //--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ ";;;;;" + DTOC( DATE( ) ) + ";;;;;;" +/##CHR(13)##//##CHR(10)##/ IIF( EMPTY( parent ), "", ALLTRIM( STR( ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) )+";0;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЧастьЗапросаРеквизитовАгента = "";/##CHR(13)##//##CHR(10)##/mAgentDetailsCode = "";/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента = ", sprres.f_agentware, sprres.vendor "/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat, /##CHR(13)##//##CHR(10)##/ sprres.markgroup, sprres.enterprice " + ЧастьЗапросаРеквизитовАгента + "/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/mEnterPrice = ТоварИнфо.enterprice;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты/##CHR(13)##//##CHR(10)##/mMarkGroup = ЕСЛИ( ТоварИнфо.markgroup == "0002", "2", ЕСЛИ( ТоварИнфо.markgroup == "0003", "3", ЕСЛИ( ТоварИнфо.markgroup == "0005", "4", ЕСЛИ( ТоварИнфо.markgroup == "1520", "5", "" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТоварИнфо.f_agentware == true AND !ПУСТО(ТоварИнфо.vendor) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAgentDetailsCode = VAL(ТоварИнфо.vendor);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,",",".");/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,":",".");/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,";",".");/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,"/",".");/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,"\",".");/##CHR(13)##//##CHR(10)##/mName = ЗАМЕНИТЬ(mName,"|",".");/##CHR(13)##//##CHR(10)##/mName = LEFT(mName,100);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,",",".");/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,":",".");/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,";",".");/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,"/",".");/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,"\",".");/##CHR(13)##//##CHR(10)##/mCname = ЗАМЕНИТЬ(mCname,"|",".");/##CHR(13)##//##CHR(10)##/mCname = LEFT(mCname,100);/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: "" (значение не заполнено) — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = IIF( parent == 0, "", ALLTRIM( STR( ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДПодразделения = ЗАПРОС( "SELECT ex_code FROM sprbranch WHERE code = (SELECT branch FROM sprskl WHERE code = ''" + ALLTRIM( sklad ) + "'')" );/##CHR(13)##//##CHR(10)##/ИДГруппыДанных = ИДПодразделения;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";;;" + mActionPriz + ";;" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";" + ИДПодразделения + ";;;" + ИДГруппыДанных + ";;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, /##CHR(13)##//##CHR(10)##/ ";;;;;;" + mMarkGroup + ";;" ) + ";" + paytype + ЕСЛИ( !ПУСТО(mAgentDetailsCode), ";" + mAgentDetailsCode, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" + mState ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.09.2020 20:39:30') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол Менеджер 3','ККМ',0.00000000,'',0.00000000,117.00000000,0,'',0.00000000,'','',0,'55114480-6396-4AE8-A9A1-CE4D52477DE7',0,1,0,'08.09.2020 20:39:30') #begin #description Весы с ПЭ CAS CL5000 (драйвер CAS) #name Весы с ПЭ CAS CL5000 (драйвер CAS) #code 0000000114 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/PUBLIC SCALE;/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ scale = СОЗДАТЬОБЪЕКТ( "CAScentre_DLL_printScale.Scale", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера весов." );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ip = ЗАПРОС("SELECT ip_addr FROM sprequipment WHERE code = ''" + code + "''" );/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ scale.IP = ip;/##CHR(13)##//##CHR(10)##/ scale.Port = 20304;/##CHR(13)##//##CHR(10)##/ scale.Type = 3;/##CHR(13)##//##CHR(10)##/ scale.Open( ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/catch /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка подключения к весам: " + scale.Resultcode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.03.2018 16:05:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ SCALE.ClearPluAndMsg( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка очистки весов: " + scale.Resultcode );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.03.2018 16:05:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##///сообщение(СРОКГОДНОСТИ);/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ scale.InitData( );/##CHR(13)##//##CHR(10)##/ scale.pluNumber = ПЛУ;/##CHR(13)##//##CHR(10)##/ scale.pluItemCode = VAL( КОД );/##CHR(13)##//##CHR(10)##/ scale.pluPrice = ЦЕНА*100; /##CHR(13)##//##CHR(10)##/ scale.pluDept = 1 ;/##CHR(13)##//##CHR(10)##/ scale.pluName1 = LEFT( ALLTRIM( НАИМЕНОВАНИЕ ), 40 );/##CHR(13)##//##CHR(10)##/ scale.pluName2 = SUBSTR( ALLTRIM( НАИМЕНОВАНИЕ ), 41, 40);/##CHR(13)##//##CHR(10)##/ scale.pluTextMessage = LEFT( STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" ), 299);/##CHR(13)##//##CHR(10)##/ scale.pluType = 1;//ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##/ scale.pluDateLife = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/ scale.SendPlu( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch {/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка выгрузки строки товара: " + scale.Resultcode );/##CHR(13)##//##CHR(10)##/ _error = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'07.03.2018 16:05:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##/Scale.close( );/##CHR(13)##//##CHR(10)##/Scale = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'07.03.2018 16:05:37') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ CAS CL5000 (драйвер CAS)','ВЕСЫ',0.00000000,'',0.00000000,5.00000000,0,'',0.00000000,'','',0,'074D55F4-94F3-4F53-B170-866AC731557F',0,1,0,'07.03.2018 16:05:37') #begin #description Профиль ФР Вики Принт (драйвер OPOS) ФН #name Профиль ФР Вики Принт (драйвер OPOS) ФН #code 0000000119 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "OPOS.FiscalPrinter.1.12", 1 );/##CHR(13)##//##CHR(10)##/ResultType = "";/##CHR(13)##//##CHR(10)##/ResultType = TYPE(driverKKM);/##CHR(13)##//##CHR(10)##/IF (ResultType <> "U" AND ResultType <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Open("Pirit") <> 0;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/IF ( !driverKKM.Claimed )/##CHR(13)##//##CHR(10)##/ driverKKM.ClaimDevice( 1000 );/##CHR(13)##//##CHR(10)##/IF ( !driverKKM.DeviceEnabled )/##CHR(13)##//##CHR(10)##/ driverKKM.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не получилось активировать устройство, то возвращаем ошибку/##CHR(13)##//##CHR(10)##/_ERROR = !driverKKM.DeviceEnabled;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKM.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##///driverKKM.ReleaseDevice( );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xB0 (176), Тип запроса 1 - номер смены/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/Ответ = "";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.DirectIO( 176, 5, @Ответ ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( Ответ )+1;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В стандарте OPOS нет метода или свойства содержащего номер смены/##CHR(13)##//##CHR(10)##/// Поэтому необходимо воспользоваться методом прямого выполнения команды/##CHR(13)##//##CHR(10)##/// Код команды получения статуса смены 0xB0 (176), Тип запроса 7 - номер чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Метод возвращает значение в самой в третьем параметре/##CHR(13)##//##CHR(10)##/Ответ = "";/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.DirectIO( 176, 3, @Ответ ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##/IF (!Пусто(Ответ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN VAL( Ответ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKM.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/driverKKM.printNormal( 2, "Открытие смены " + STR( НомерСмены ) ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKM.printNormal( 2, Заголовок ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/driverKKM.EndNonFiscal( )/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKM.FiscalReceiptType = 1; // 1- FPTR_RT_CASH_IN, 2 - FPTR_RT_CASH_OUT/##CHR(13)##//##CHR(10)##/driverKKM.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKM.PrintRecTotal(0, Сумма, "0");/##CHR(13)##//##CHR(10)##/driverKKM.EndFiscalReceipt( false );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##/driverKKM.FiscalReceiptType = 2; // 2 - FPTR_RT_CASH_OUT, 1- FPTR_RT_CASH_IN/##CHR(13)##//##CHR(10)##/driverKKM.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##/driverKKM.PrintRecTotal(0, Сумма, "0");/##CHR(13)##//##CHR(10)##/driverKKM.EndFiscalReceipt( false );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЕГАИСURL = ЕгаисUrl.url;/##CHR(13)##//##CHR(10)##/ ЕГАИСSIGN = ЕгаисUrl.sign;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.PrintRecMessage("#27’|204pN"+ЕГАИС_ОТВЕТ+"’");/##CHR(13)##//##CHR(10)##/ //driverKKM.PrintRecMessage("#27’|204pB"+ЕГАИС_ОТВЕТ+"’");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = ЕГАИСURL;/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = ЕГАИСSIGN;/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.printNormal( 2, StringForPrinting );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.SetPOSID(ALLTRIM(_ИМЯКАССИРА),"1");/##CHR(13)##//##CHR(10)##/// Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.DirectIO( 174, 1008, ALLTRIM(ПОЧТА) );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.DirectIO ( 174, 1021, ALLTRIM(_ИМЯКАССИРА) );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/driverKKM.FiscalReceiptType = 4; // 4- FPTR_RT_SALES/##CHR(13)##//##CHR(10)##/driverKKM.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 1, ЕСЛИ( КодНалога == ''04'', 0, ЕСЛИ( КодНалога == ''06'', 2, 3 ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.UnitName = ALLTRIM(Единица);/##CHR(13)##//##CHR(10)##/driverKKM.printRecItem( 0,Цена,КодНалога, Количество*1000, ЦенаПродажи*Количество, ALLTRIM(Наименование) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKM.CapRecPresent )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 1, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 3, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 2, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 4, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/driverKKM.FiscalReceiptType = 7; // /##CHR(13)##//##CHR(10)##/driverKKM.BeginFiscalReceipt( true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 1, ЕСЛИ( КодНалога == ''04'', 0, ЕСЛИ( КодНалога == ''06'', 2, 3 ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.UnitName = ALLTRIM(Единица);/##CHR(13)##//##CHR(10)##/driverKKM.printRecItem( 0,Цена,КодНалога, Количество*1000, ЦенаПродажи*Количество, ALLTRIM(Наименование) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##/IF ( driverKKM.CapRecPresent )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 1, "", ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 3, "", -ПроцентСкидки, 0 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.CapAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 2, "", СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecItemAdjustment( 4, "", -СуммаСкидки, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 1, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 3, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 2, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 4, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 0, ROUND( СуммаНал, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 1, ROUND( СуммаБезнал, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 2, ROUND( СуммаКредит, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.EndFiscalReceipt( false );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКодОборудования + "''" );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = VAL( ПАРОЛЬ );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.printRecSubTotal( СУММАРЕГИСТРАЦИИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим скидки на чек/##CHR(13)##//##CHR(10)##/// Если поддерживаются процентный скидки, то печатаем их/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.CapSubPercentAdjustment )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 1, "Скидка на чек", ПроцентСкидки );/##CHR(13)##//##CHR(10)##/ IF ( ПроцентСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 3, "Скидка на чек", -ПроцентСкидки );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе печатем суммовые скидки/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.CapSubAmountAdjustment )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 2, "Скидка на чек", СуммаСкидки );/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки < 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.printRecSubtotalAdjustment( 4, "Скидка на чек", -СуммаСкидки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 0, ROUND( СуммаНал, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 1, ROUND( СуммаБезнал, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.printRecTotal( 2, ROUND( СуммаКредит, 2 ), "0");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.EndFiscalReceipt( false );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 40;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKM.printNormal( 2, Строка ); // 2 - FPTR_S_RECEIPT/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##///driverKKM.BeginNonFiscal( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///driverKKM.EndNonFiscal( )',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.PrintXReport( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.PrintZReport( );',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.GetData( 10, 0, @Ответ ); // знак @ перед переменной означает передачу параметра по ссылке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN VAL( Ответ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ErrorString;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Пирит";',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Сообщение("Для настройки драйвера запустите служебную утилиту TestOPOS.exe");/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Пирит/Вики-принт";',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сбрасываем режим ФР, отменяем незаконченные чеки и переводим ФР в исходное состояние/##CHR(13)##//##CHR(10)##/driverKKM.ResetPrinter( );/##CHR(13)##//##CHR(10)##/// Отсоединяемся от ФР/##CHR(13)##//##CHR(10)##/driverKKM.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/// Освобождаем ФР для работы с другими проложениями/##CHR(13)##//##CHR(10)##/driverKKM.ReleaseDevice( );/##CHR(13)##//##CHR(10)##/// Закрываем драйвер/##CHR(13)##//##CHR(10)##/driverKKM.Close( )/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,0,0,'21.09.2017 10:44:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Вики Принт (драйвер OPOS) ФН','ФР',0.00000000,'',0.00000000,380.00000000,0,'',0.00000000,'','',0,'AE1130FB-BA21-4E5B-862D-5D6A6CA01A18',0,1,0,'21.09.2017 10:45:13') #begin #description Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7 #name Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7 #code 0000000121 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.7/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///PUBLIC connector;/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; // true - Выгрузка блоками по 500 товаров, false - обычная выгрузка. /##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##///отладка/##CHR(13)##//##CHR(10)##/РежимОтладки = false;/##CHR(13)##//##CHR(10)##///**ПЕРЕМЕННЫЕ, ОПРЕДЕЛЯЮЩИЕ РАСПОЛОЖЕНИЕ СЕРВЕРА MOBILESMARTS И ПОРТ ДОСТУПА К НЕМУ**/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1"; //по умолчанию предполагается, что сервер MobileSmarts установлен на том же ПК, с которого производится выгрузка из программы Айтида./##CHR(13)##//##CHR(10)##/Порт ="10501"; //значение по умолчанию для сервера mobileSmarts/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлуЛога = "C:\Users\Public\Documents"; /##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьКФайлуЛога + "\Журнал выгрузки " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуЛога,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЛога = ФАЙЛСОЗДАТЬ( ИмяФайлаЛога, 0 );/##CHR(13)##//##CHR(10)##/ Разделитель = ";";/##CHR(13)##//##CHR(10)##/ СтрокаЗаголовокЛога = "ЭтоАлкоголь"+Разделитель+"АлкоКодВ"+Разделитель+"КодТовара"+Разделитель+"Наименование"+Разделитель+"ШтрихКоды"+Разделитель+"Артикул"+Разделитель+"Цена"+/##CHR(13)##//##CHR(10)##/ Разделитель+"Остаток"+Разделитель+"АлкоКодВ"+Разделитель+"АлкоНаимВ"+Разделитель+"Объем"+Разделитель+"Крепость"+Разделитель+"Алкокод"+Разделитель+"Производитель"+/##CHR(13)##//##CHR(10)##/ Разделитель+"ПроизводительИмя"+Разделитель+"ПроизводительИНН"+Разделитель+"ПроизводительКПП";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЗаголовокЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаЗаголовокЛога = "";/##CHR(13)##//##CHR(10)##/ СтрокаЛога = "";/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Разделитель = ";"; /##CHR(13)##//##CHR(10)##/ СтрокаЛога = ЭтоАлкоголь+Разделитель+АлкоКодВ+Разделитель+КодТовара+Разделитель+Наименование+Разделитель+ШтрихКоды+Разделитель+Артикул+Разделитель+Цена+/##CHR(13)##//##CHR(10)##/ Разделитель+Остаток+Разделитель+АлкоКодВ+Разделитель+АлкоНаимВ+Разделитель+Объем+Разделитель+Крепость+Разделитель+Алкокод+Разделитель+Производитель+/##CHR(13)##//##CHR(10)##/ Разделитель+ПроизводительИмя+Разделитель+ПроизводительИНН+Разделитель+ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ //ФайлЛога = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога,0,1);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = "шт"; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ packing.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ packing.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ CATCH/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = "Не удалось записать строку с товаром в базу MobileSmarts";/##CHR(13)##//##CHR(10)##/ //ФайлЛога = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога,0,1);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowCol = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowCol") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowCol.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = VAL(СписокСкладов.code);/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowCol.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowCol);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "007" OR СписокДокументов.code == "045" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = ЕСЛИ( СписокДокументов.code == "001", "Приход на склад", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "002", "Подбор заказа", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "007", "Инвентаризация",/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "045", "Инвентаризация", 0 ))));/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "Инвентаризация ЕГАИС";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок;/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1; //Склад //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента;//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ КонтрольКолва = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",КонтрольКолва); //Контроль количества по заявке./##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("price", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (РежимОтладки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,0,0,'16.10.2017 16:55:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.7/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара, ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке;;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS;;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false; /##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/docType = ЕСЛИ( КОДДОКУМЕНТА == "001", "Приход на склад", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "002", "Подбор заказа", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "007", "Инвентаризация",/##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "045", "Инвентаризация", "" ))));/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF (TYPE(Document) == "U")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "#_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТА) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Document.CurrentItems.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ");/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ Цена = 0.00;//Элемент.GetField("price");/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc="+STDF(ШтрихКод));/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) AND ПУСТО(Цена))/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Наименование)) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,0,0,'16.10.2017 16:55:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts ЕГАИС";',0,0,0,0,'16.10.2017 16:55:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'16.10.2017 16:55:54') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7','ТСД',0.00000000,'',0.00000000,2348.00000000,0,'',0.00000000,'','',0,'69DFE626-A5D9-4212-9D1D-A2EEAE568D9A',0,1,0,'16.10.2017 16:56:45') #begin #description Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.5 #name Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.5 #code 0000000117 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'16.10.2017 16:56:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.8.1/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC connector;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = "шт"; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаЦен.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/indexPrice=0;/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",STR(Цена,10,2));/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/IF (IndexPrice > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColSklad.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = VAL(СписокСкладов.code);/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Цена", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'16.10.2017 16:56:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.8.5/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF (TYPE(Document) == "U")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "#_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТА) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Document.CurrentItems.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ");/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ Цена = 0;//Элемент.GetField("Цена");/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc="+STDF(ШтрихКод));/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'16.10.2017 16:56:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts Магазин15";',0,0,1,0,'16.10.2017 16:56:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.5','ТСД',0.00000000,'',0.00000000,2784.00000000,0,'',0.00000000,'','',0,'05D95536-3626-45F3-A5CE-F00085E92993',0,1,0,'16.10.2017 16:56:21') #begin #description Обмен данными между Айтида и Эвотор v.3.6 #name Обмен данными между Айтида и Эвотор v.3.6 #code 0000000127 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'PUBLIC ИмяФайлаЖурнала, ИМЯОБОРУДОВАНИЯ, УИДМАГАЗИНА;/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "evotor_out.txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log.txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = HTTPGET(Соединение, АдресРесурса, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных. Проверьте соответсвие магазина в Эвотор и склада в карточке торгового оборудования";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##///ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ""; // передаем пустое тело в запросе для очистки всех товаров/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products/delete";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF (( Ответ1 <> 200 ) AND (Ответ1<>""))/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/// _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось отправить запрос на удаление всех товаров в облако Эвотор.";/##CHR(13)##//##CHR(10)##/// //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/// //RETURN false;/##CHR(13)##//##CHR(10)##/// } /##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", "");/##CHR(13)##//##CHR(10)##/ RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", ""), "/", " "), "\", " ");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = КОЛИЧЕСТВОСТРОК("СписокПапок");/##CHR(13)##//##CHR(10)##/н=0;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ н++;/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ic + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ //code = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) ); //код/##CHR(13)##//##CHR(10)##/ //barCodes[0] = ""; //массив штрихкодов/##CHR(13)##//##CHR(10)##/ //alcoCodes[0] = ""; //массив алкокодов/##CHR(13)##//##CHR(10)##/ _name = LEFT( XMLTRANS( ALLTRIM( name )), 100); //наименование/##CHR(13)##//##CHR(10)##/ //price = 0; //цена продажи/##CHR(13)##//##CHR(10)##/ //quantity = 0; //остаток/##CHR(13)##//##CHR(10)##/ //costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ //measureName = ""; //наименование единицы/##CHR(13)##//##CHR(10)##/ //tax = "NO_VAT"; //ставка налога/##CHR(13)##//##CHR(10)##/ allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/ //description = ""; //описание товара/##CHR(13)##//##CHR(10)##/ //articleNumber = ""; //артикул/##CHR(13)##//##CHR(10)##/ hasVariants = "false";/##CHR(13)##//##CHR(10)##/ parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/ group = "true"; //является группой/##CHR(13)##//##CHR(10)##/ //_type = "NORMAL"; //тип товара/##CHR(13)##//##CHR(10)##/ //alcoholByVolume = 0; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ //alcoholProductKindCode = 0; //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ //tareVolume = 0; //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",code,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",_name,",",true); /##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,Разделитель,true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"hasVariants",hasVariants,",",false);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,"",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ IF (н <= КоличествоЭлементов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'н=0; /##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(code) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "VAT_10"; //НДС 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "VAT_18"; //НДС 18%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "VAT_0"; //НДС 0%/##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), "/", ""), "\",""), ";"," "), """", ""), CHR(13),""), CHR(10),""), CHR(13)+CHR(10)," ");/##CHR(13)##//##CHR(10)##/ RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", ""), "/", " "), "\", " ");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##///СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/н++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprnn WHERE nn = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/IF (uuid == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code ); //код/##CHR(13)##//##CHR(10)##/barCodes[0] = ALLTRIM( barcode ); //массив штрихкодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr, a_proc, dbo.fn_getalcocodes(nn) as alcocodes/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/name = XMLTRANS(STDF(ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) )));/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = XMLTRANS(STDF(ALLTRIM( cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) )));/##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = ТоварИнфо.d_litr;/##CHR(13)##//##CHR(10)##/mAProc = ТоварИнфо.a_proc;/##CHR(13)##//##CHR(10)##/alcoCodes[0] = alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/price = ALLTRIM( STR( cena, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/quantity = ALLTRIM( STR( kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/measureName = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = mEdn; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = "шт";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( kodn )], "NO_VAT"); //налоги/##CHR(13)##//##CHR(10)##/allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/description = mCname; //описание товара/##CHR(13)##//##CHR(10)##/articleNumber = ALLTRIM(article); //артикул/##CHR(13)##//##CHR(10)##/parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/group = "false"; //является ли группой/##CHR(13)##//##CHR(10)##/_type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL_NOT_MARKED", ЕСЛИ(mAlco,"ALCOHOL_MARKED","NORMAL")); //тип товара/##CHR(13)##//##CHR(10)##/alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/IF (н > 1) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##///тэги/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",mCode,",",true);/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",name,",",true); /##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##///IF (н < КоличествоЭлементов)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'СтрокаТоваров = СтрокаТоваров + "]"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "]");/##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "Content-Encoding:gzip";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Заголовки[] = "Content-Length:"+ФАЙЛРАЗМЕР(ДескрипторФайла);/##CHR(13)##//##CHR(10)##///Заголовки[] = "Accept: application/json";/##CHR(13)##//##CHR(10)##///Заголовки[] = "Charset:UTF-8";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Соединение = HTTPСоединить( "https://api.evotor.ru" );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в облако Эвотор");/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с облаком Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в облако Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS code, '''' AS reason, '''' AS subject, '''' AS value SET FMTONLY OFF","Ошибки");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("Ошибки","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("Ошибки" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##/СтрокаОшибок = "";/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Ошибки" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ALLTRIM(Ошибки.code);/##CHR(13)##//##CHR(10)##/ ПричинаОшибки = ALLTRIM(Ошибки.reason);/##CHR(13)##//##CHR(10)##/ ОбъектОшибки = ALLTRIM(Ошибки.subject);/##CHR(13)##//##CHR(10)##/ ЗначениеОшибка = ALLTRIM(Ошибки.value);/##CHR(13)##//##CHR(10)##/ СтрокаОшибок = СтрокаОшибок + " Код ошибки: " + КодОшибки + ". Причина ошибки: " + ПричинаОшибки + ". Объект ошибки: " + ОбъектОшибки + ". Недопустимое значение: " + ЗначениеОшибка; /##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(Ответ1))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( Ответ1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаОшибок))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( СтрокаОшибок );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##/PUBLIC МОЖНОГРУЗИТЬ, ИМЯОБОРУДОВАНИЯ, КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_in))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "evotor_in.txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу+ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_in, RAT(path_in, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT(path_in, LEN(path_in)-RAT(path_in,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log.txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##///запрос списка магазинов/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///запрос списка устройств/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/devices/search";/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS name, '''' AS storeUuid SET FMTONLY OFF","СписокТерминалов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокТерминалов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДТЕРМИНАЛА = СписокТерминалов.uuid;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕТЕРМИНАЛА = ALLTRIM(СписокТерминалов.name);/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНАТЕРМИНАЛА = СписокТерминалов.storeUuid;/##CHR(13)##//##CHR(10)##/ IF ((УИДМАГАЗИНАТЕРМИНАЛА == УИДМАГАЗИНА) AND (ИМЯОБОРУДОВАНИЯ == НАЗВАНИЕТЕРМИНАЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДТЕРМИНАЛА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить терминал для получения данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF (ПЕРИОДЗАГРУЗКИ == 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( КОНЕЦПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( КОНЕЦПЕРИОДА, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "";/##CHR(13)##//##CHR(10)##/ device = "?&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Загрузка прервана.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[0] = "SELL";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[1] = "PAYBACK";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[4] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[5] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[6] = "WRITE_OFF";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[8] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[9] = "FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[10] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[14] = "ACCEPT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[15] = "RETURN";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[16] = "INVENTORY";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[17] = "REVALUATION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[18] = "OPEN_TARE";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[11] = "REGISTER_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[14] = "POSITION_TAX";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[15] = "DISCOUNT_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[35] = "DISCOUNT_DOCUMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[40] = "PAYMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[42] = "DOCUMENT_OPEN";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[45] = "DOCUMENT_CLOSE_FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[50] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[51] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[55] = "DOCUMENT_CLOSE";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[60] = "FPRINT_X_REPORT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[61] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[62] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[63] = "FPRINT_Z_REPORT";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[1] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[4] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[5] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[6] = "003";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[8] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[9] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[10] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[14] = "001";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[15] = "055";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[16] = "007";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[17] = "005";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[18] = "046";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[19] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[20] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[0] = "CASH";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[1] = "CARD";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##///MESSAGEBOX( Ответ );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/IF ( ФайлЗагрузки == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл загрузки ''" + ALLTRIM( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ(ФайлЗагрузки, JSONстрока);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 20 ) AS doctype, SPACE( 30 ) AS saletype, '''' AS docuuid, '''' AS deviceid, '''' AS type, '''' AS commodityName, CONVERT( datetime, '''' ) AS creationDate,'''' AS id, '''' AS userCode, '''' AS userUuid,/##CHR(13)##//##CHR(10)##/CONVERT(datetime, '''') AS closeDate, CONVERT(datetime, '''') AS openDate, '''' AS openUserCode, '''' AS openUserUuid, '''' AS closeUserCode,/##CHR(13)##//##CHR(10)##/'''' AS closeUserUuid, '''' AS sessionUUID, '''' AS sessionNumber, '''' AS number, '''' AS closeResultSum, '''' AS closeSum, '''' AS sum, '''' AS storeUuid, '''' AS completeInventory,/##CHR(13)##//##CHR(10)##/'''' AS version, '''' AS baseDocumentNumber, '''' AS baseDocumentUUID, '''' AS clientName, '''' AS clientPhone, '''' AS couponNumber,/##CHR(13)##//##CHR(10)##/'''' AS alcoholByVolume, '''' AS alcoholProductKindCode, '''' AS balanceQuantity, '''' AS barcode, '''' AS commodityCode, '''' AS commodityUuid, '''' AS commodityType, /##CHR(13)##//##CHR(10)##/'''' AS costPrice, '''' AS fprintSection, '''' AS mark, '''' AS measureName,'''' AS tareVolume,'''' AS price, '''' AS quantity, '''' AS resultPrice,/##CHR(13)##//##CHR(10)##/'''' AS resultSum, '''' AS resultTaxSum, '''' AS tax, '''' AS taxPercent, '''' AS taxRateCode, '''' AS taxSum, '''' AS paymentType, '''' AS rrn, '''' AS documentNumber,/##CHR(13)##//##CHR(10)##/'''' AS receiptNumber, '''' AS proceeds,'''' AS cash,'''' AS collection, '''' AS cashIn,'''' AS cashOut, '''' AS total, '''' AS cashInQuantity, '''' AS cashOutQuantity,/##CHR(13)##//##CHR(10)##/'''' AS revenue, '''' AS sessionSalesResults, '''' AS sessionPurchasesResults, '''' AS nonzeroSumSales, '''' AS nonzeroSumPurchases, '''' AS quantitySalesQuantity,/##CHR(13)##//##CHR(10)##/'''' AS quantitySalesReversal,'''' AS quantitySalesBack, '''' AS reversalBack, '''' AS zreportNumber; SET FMTONLY OFF", "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаИнициализации = "commodityName=''''; ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DocumentTypes = "''SELL'' , ''PAYBACK'' , ''CASH_INCOME'' , ''CASH_OUTCOME'' , ''OPEN_SESSION'' , ''FPRINT'' , ''CLOSE_SESSION'' , ''INVENTORY'' , ''ACCEPT'' , ''RETURN'' , ''WRITE_OFF'' , ''REVALUATION'' , ''OPEN_TARE''";/##CHR(13)##//##CHR(10)##/TransactionTypes = "''DISCOUNT_DOCUMENT'' , ''DISCOUNT_POSITION'' , ''DISCOUNT_DOCUMENT_POSITION'' , ''DOCUMENT_OPEN'' , ''DOCUMENT_CLOSE'' , ''DOCUMENT_CLOSE_FPRINT'' , ''REGISTER_POSITION'' , ''REGISTER_BILLS'' ,/##CHR(13)##//##CHR(10)##/''CASH_INCOME'' , ''CASH_OUTCOME'' , ''INVENTORY'' , ''PAYMENT'' , ''OPEN_SESSION'' , ''CLOSE_SESSION'' , ''FPRINT_OPEN_SESSION'' , ''FPRINT_X_REPORT'' , ''FPRINT_Z_REPORT'' , ''POSITION_TAX'' , ''REVALUATION''";/##CHR(13)##//##CHR(10)##/doctype = "";/##CHR(13)##//##CHR(10)##/saletype = "";/##CHR(13)##//##CHR(10)##/docuuid = "";/##CHR(13)##//##CHR(10)##/Скрипт = "IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + DocumentTypes + " ) ) /##CHR(13)##//##CHR(10)##/ doctype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + TransactionTypes + " ) ) /##CHR(13)##//##CHR(10)##/ saletype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''uuid'' AND ЗначениеПоля <> ''null'' )/##CHR(13)##//##CHR(10)##/ docuuid = ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ ЗначениеПоля";/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокФР" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КоличествоСтрок( "Магазины" );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Магазины");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Магазины" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбщаяСумма = 0;/##CHR(13)##//##CHR(10)##/ Наличность = 0;/##CHR(13)##//##CHR(10)##/ СуммаСмены = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = 0;/##CHR(13)##//##CHR(10)##/ Инкассация = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docuuid = Магазины.docuuid;/##CHR(13)##//##CHR(10)##/ //------ Если документ пустой - пропускаем /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docuuid ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doctype = Магазины.doctype;/##CHR(13)##//##CHR(10)##/ saletype = Магазины.saletype;/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ tranzType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 63)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСВИЕТРАНЗАКЦИЙ[i] == saletype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = STR(i); //saletype/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = Магазины.creationDate; /##CHR(13)##//##CHR(10)##/ tranzDate = LEFT(TTOC( ДАТАДОКУМЕНТА, 4),10);/##CHR(13)##//##CHR(10)##/ tranzTime = ALLTRIM(TTOC( ДАТАДОКУМЕНТА, 8));/##CHR(13)##//##CHR(10)##/ POSNumber = 1;//Магазины.deviceid;/##CHR(13)##//##CHR(10)##/ chequeNumber = Если(Магазины.receiptNumber=="",0,Магазины.receiptNumber);/##CHR(13)##//##CHR(10)##/ Seller = 0;//GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ paymentType = Магазины.paymentType;/##CHR(13)##//##CHR(10)##/ paymentTypeInt = ЕСЛИ(paymentType=="",0,ЕСЛИ(СООТВЕТСВИЕОПЛАТ[0]==paymentType,0,1));/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = Магазины.price;/##CHR(13)##//##CHR(10)##/ Quantity = Магазины.quantity;/##CHR(13)##//##CHR(10)##/ Наличность = Магазины.cash;/##CHR(13)##//##CHR(10)##/ Инкассация = Магазины.collection;/##CHR(13)##//##CHR(10)##/ СуммаОтчет = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = Магазины.revenue;/##CHR(13)##//##CHR(10)##/ СуммаСмены = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = Магазины.closeSum;/##CHR(13)##//##CHR(10)##/ zReportNumber = Если(Магазины.zReportNumber=="",0,VAL(Магазины.zReportNumber));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 18)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСТВИЕОПЕРАЦИЙ[i] == doctype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequeType = STR(i); //doctype/##CHR(13)##//##CHR(10)##/ dockIndCode = СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[i];/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ecrSession = Магазины.sessionNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Магазины.resultPrice;/##CHR(13)##//##CHR(10)##/ SummWD = Магазины.resultSum;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = Магазины.mark;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ЕСЛИ(Магазины.barcode==''null'' OR Магазины.barcode=="","",Магазины.barcode));/##CHR(13)##//##CHR(10)##/ Summ = Магазины.sum;/##CHR(13)##//##CHR(10)##/ currency = 0;/##CHR(13)##//##CHR(10)##/ education = 0;/##CHR(13)##//##CHR(10)##/ commentCode = 0;/##CHR(13)##//##CHR(10)##/ universalNDOK = Магазины.documentNumber;/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (tranztype == "40" AND paymentTypeInt == 0 AND VAL(Summ) < 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "61" AND sessionclosecount < 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sessionclosecount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "63" AND (zReportNumber == 0))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF (tranzType == "61")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаСмены);/##CHR(13)##//##CHR(10)##/ kolp = 0;/##CHR(13)##//##CHR(10)##/ summa = VAL(СуммаСмены);/##CHR(13)##//##CHR(10)##/ summasale = VAL(СуммаСмены); /##CHR(13)##//##CHR(10)##/ sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranzType == "63")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ //chequeNumber = zReportNumber;/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаОтчет);/##CHR(13)##//##CHR(10)##/ kolp = VAL(Наличность);/##CHR(13)##//##CHR(10)##/ summa = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ summasale = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND paymentTypeInt == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", "008" )))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "046" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины")/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,0,0,'26.12.2018 16:40:43') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными между Айтида и Эвотор v.3.6','ККМ',0.00000000,'',0.00000000,4620.00000000,0,'',0.00000000,'','',0,'867D6609-0D6C-4B3B-944C-689309F3A7E9',0,1,0,'26.12.2018 16:40:43') #begin #description Обмен данными с Фронтол 5.2 (вскрытие тары) #name Обмен данными с Фронтол 5.2 (вскрытие тары) #code 0000000071 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##///mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0 OR РазливнойАлко, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty OR РазливнойАлко, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty OR РазливнойАлко, "1", "0" );/##CHR(13)##//##CHR(10)##/mFlagsV = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",0,0,1,1,1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco AND !РазливнойАлко, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + ЕСЛИ( _ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52, mBarcode, "" ) + ";" + STDE( "ВТ " + mName, 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( "ВТ " + mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" + mFlagsV + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + /##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + rsubject + ";;;" + mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";Для вскрытия тары;" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если надо, то выгружаем алкокоды/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nnvid, sprnn.ed, egais.alcocode/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ // Если продукция разливная, то алкокод связываем со второй карточкой, которая для вскрытия тары/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокАлкокодов.nnvid ) > 0 AND VAL( СписокАлкокодов.nnvid ) < 500 AND !ВСПИСКЕ( VAL( СписокАлкокодов.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокАлкокодов.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ЕСЛИ( РазливнойАлко, STR( VAL( СписокАлкокодов.maincode ) + 90000000 ), СписокАлкокодов.maincode ) + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34, 80, 27 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> ''18'', "008", /##CHR(13)##//##CHR(10)##/ IIF( VAL( dockIndCode ) == 18, "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ЕСЛИ( docCode == "046", "шт", ТОВАРИНФО.ed );/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ // Если был прочитан ШК, то ищем ЕД для этого ШК и пересчитываем количество/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) AND !ПУСТО( barcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ed, koef, koef_c FROM sprres_ed WHERE code = ''" + nn + "'' AND barcode = ''" + STDF( barcode ) + "''", "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "ЕдиницаИнфо" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ed = ЕдиницаИнфо.ed;/##CHR(13)##//##CHR(10)##/ cena = cena / ЕдиницаИнфо.koef_c;/##CHR(13)##//##CHR(10)##/ kolp = kolp / ЕдиницаИнфо.koef;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:17') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (вскрытие тары)','ККМ',0.00000000,'',0.00000000,106.00000000,0,'',0.00000000,'','',0,'782C7F01-ECCB-40A1-A4C1-C9018930BB1D',0,1,0,'08.04.2019 15:58:17') #begin #description Обмен данными с Фронтол 5.2 (дисконтные карты из клиентов владельцев карт) #name Обмен данными с Фронтол 5.2 (дисконтные карты из клиентов владельцев карт) #code 0000000070 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM sprmclient cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КЛИЕНТЫ + " tempcln ON cln.code = tempcln.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard crd ON cln.card = crd.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mCname = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspsubname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:48') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (дисконтные карты из клиентов владельцев карт)','ККМ',0.00000000,'',0.00000000,105.00000000,0,'',0.00000000,'','',0,'50FD5A16-B999-49E5-9C4C-AC4858F959EE',0,1,0,'08.04.2019 15:58:48') #begin #description Обмен данными с Фронтол 5.2 (разделитель строк 0x0A) #name Обмен данными с Фронтол 5.2 (разделитель строк 0x0A) #code 0000000073 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mCname = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S", 1024, CHR( 0x0A ) ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S", -1, CHR( 0x0A ) );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspsubname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (разделитель строк 0x0A)','ККМ',0.00000000,'',0.00000000,110.00000000,0,'',0.00000000,'','',0,'EC48DCB0-2015-4EE5-879C-4E31E2256C9C',0,1,0,'08.04.2019 15:59:02') #begin #description Обмен данными с Фронтол 5.2 (с выгрузкой ручных скидок) #name Обмен данными с Фронтол 5.2 (с выгрузкой ручных скидок) #code 0000000060 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,' -- параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ -- значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/ -- проверяется тип обмена, файл флаг создается только при автоматическом/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = GetWord( string, ";", 13 );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspsubname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + barcode + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mCname = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'27.03.2019 1:05:35') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (с выгрузкой ручных скидок)','ККМ',0.00000000,'',0.00000000,62.00000000,0,'',0.00000000,'','',0,'F0684CF9-5016-411D-A3C2-C1CA1C9DE962',0,1,0,'27.03.2019 1:05:35') #begin #description Обмен данными с Фронтол X с версии 1.8.1 #name Обмен данными с Фронтол X с версии 1.8.1 #code 0000000096 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ""; //ALLTRIM( barcode ); ШК выгрузятся в разделе ШК. Здесь они могут помешать, например для весового товара/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject,/##CHR(13)##//##CHR(10)##/ sprres.group_, sprres.f_make/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = STR( VAL( ТоварИнфо.rsubject ) );/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##/ IF ( VAL( paytype ) == 0 ) paytype = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 AND VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" ) +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ",,,,,,,1", "" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем Коды Групп печати /##CHR(13)##//##CHR(10)##/КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не указаны коды групп печати, то берем их из кода ФР/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( kodGrPintChek ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName ) + ";" + STDE( mCname ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, /##CHR(13)##//##CHR(10)##/ ";;;;;;;;;;;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + ALLTRIM( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GETWORD( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ // ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов возможно не используется в СЕ /##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат возможно не используется в СЕ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/// ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/// ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/// ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/// СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/// СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##///iif(СертификатНачалоДиапазонаДлин!=0, СертификатНачалоДиапазонаДлин, "") + ";" + iif(СертификатКонецДиапазонаДлин!=0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##///STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##///DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##///СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##///SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##///Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/// SKIP( 1 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'09.12.2019 10:12:38') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.8.1','ККМ',0.00000000,'',0.00000000,151.00000000,0,'',0.00000000,'','',0,'E1193835-AEE2-4277-89F7-53FE4313F7EB',0,1,0,'09.12.2019 10:12:38') #begin #description Обмен данными с Фронтол X с версии 1.8.1 (вскрытие тары) #name Обмен данными с Фронтол X с версии 1.8.1 (вскрытие тары) #code 0000000097 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ""; //ALLTRIM( barcode ); ШК выгрузятся в разделе ШК. Здесь они могут помешать, например для весового товара/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject,/##CHR(13)##//##CHR(10)##/ sprres.group_, sprres.f_make/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = STR( VAL( ТоварИнфо.rsubject ) );/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##/ IF ( VAL( paytype ) == 0 ) paytype = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 AND VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = IIF( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + IIF( enterqty, "0", "1" ) + ",1,1," + IIF( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Вычисляем Коды Групп печати /##CHR(13)##//##CHR(10)##/КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если не указаны коды групп печати, то берем их из кода ФР/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( kodGrPintChek ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco AND !РазливнойАлко, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, /##CHR(13)##//##CHR(10)##/ ";;;;;;;;;;;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;" + mFr_code + ";" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;;;;;;;;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, /##CHR(13)##//##CHR(10)##/ ";;;;;;;;;;;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если надо, то выгружаем алкокоды/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nnvid, sprnn.ed, egais.alcocode/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ // Если продукция разливная, то алкокод связываем со второй карточкой, которая для вскрытия тары/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокАлкокодов.nnvid ) > 0 AND VAL( СписокАлкокодов.nnvid ) < 500 AND !ВСПИСКЕ( VAL( СписокАлкокодов.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокАлкокодов.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ЕСЛИ( РазливнойАлко, STR( VAL( СписокАлкокодов.maincode ) + 90000000 ), СписокАлкокодов.maincode ) + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + ALLTRIM( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//identifЗагрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GETWORD( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND VAL( AspectsList ) <> 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> ''18'', "008", /##CHR(13)##//##CHR(10)##/ IIF( VAL( dockIndCode ) == 18, "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ЕСЛИ( docCode == "046", "шт", ТОВАРИНФО.ed );/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// MessageLOG( "C:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + DTOC( НАЧАЛОПЕРИОДА ) + ";" + DTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( path_in ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( f_fileflag OR !ФАЙЛ( path_flag_in ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'22.10.2019 16:06:45') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол X с версии 1.8.1 (вскрытие тары)','ККМ',0.00000000,'',0.00000000,152.00000000,0,'',0.00000000,'','',0,'7E254C53-AB3B-464D-BC16-368D75A0EF1A',0,1,0,'22.10.2019 16:06:45') #begin #description Весы электронные Штрих (драйвер электронных весов Штрих) #name Весы электронные Штрих (драйвер электронных весов Штрих) #code 0000000130 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'24.04.2018 17:46:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/_НомерВесов = 1;/##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера AddIn.DrvSM" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/ДрайверВесов.CurrentDeviceIndex = _НомерВесов - 1;/##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ДрайверВесов.GetDeviceMetrics();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.ReadWeight( );/##CHR(13)##//##CHR(10)##/ IF ( ДрайверВесов.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось получить вес с весов");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка: " + ДрайверВесов.ResultDescription );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'24.04.2018 17:46:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы электронные Штрих (драйвер электронных весов Штрих)','ВЕСЫБЭ',0.00000000,'',0.00000000,487.00000000,0,'',0.00000000,'','',0,'CA8101E7-5773-4D68-A06E-E21666820F66',0,1,0,'31.10.2019 11:24:46') #begin #description Профиль ФР Штрих-онлайн (ФН) v.3 с платежной системой Атол #name Профиль ФР Штрих-онлайн (ФН) v.3 с платежной системой Атол #code 0000000128 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/PUBLIC DriverPayCard, ReferenceNumber, TerminalNumber, ВСЕГОБЕЗНАЛ. _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/TerminalNumber = 1;/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50;/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##///ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##///PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##///ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Печать может производиться на несколько ФР. Поэтому надо выбрать нужный и к нему подключиться/##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = НОМЕРУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОтменаАвторизации( Операция )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка " + КодОшибки, "Ошибка метода " + Операция + " " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО ( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо указать ссылочный номер." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = СОЗДАТЬОБЪЕКТ( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM.WaitForPrinting();/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = 1; //неполная отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ШИРИНАЛЕНТЫ = 50;/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОКОПИЙСЛИПА = 1;/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЕГАИСURL = ЕгаисUrl.url;/##CHR(13)##//##CHR(10)##/ ЕГАИСSIGN = ЕгаисUrl.sign;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( ЕГАИС_ОТВЕТ );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ЕГАИС_ОТВЕТ;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Print2DBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСURL;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСSIGN;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##///driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##///driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##///driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##///проверим состояние чековой ленты/##CHR(13)##//##CHR(10)##/WHILE (1==1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus(); //запрос статуса ККМ/##CHR(13)##//##CHR(10)##/ IF (driverKKM.ReceiptRibbonOpticalSensor == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ТекстВопроса = "Закончилась или оборвана чековая лента. Проверьте состояние ленты." + СИМВОЛПОКОДУ(13) + " Продолжить печать?";/##CHR(13)##//##CHR(10)##/ //Ответ = MESSAGEBOX(ТекстВопроса,,4);/##CHR(13)##//##CHR(10)##/ //IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ driverKKM.ContinuePrint();/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // ТекстОтвета = "Закончилась или оборвана чековая лента. Проверьте состояние ленты.";/##CHR(13)##//##CHR(10)##/ // СООБЩЕНИЕ(ТекстОтвета,,0);/##CHR(13)##//##CHR(10)##/ // Error = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (driverKKM.ECRAdvancedMode == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // ТекстВопроса = "Фискальный регистратор находится в режиме ожидания продолжения печати." + СИМВОЛПОКОДУ(13) + " Закончить печать предыдущего чека?";/##CHR(13)##//##CHR(10)##/ // Ответ = MESSAGEBOX(ТекстВопроса,,4);/##CHR(13)##//##CHR(10)##/ // IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ // {/##CHR(13)##//##CHR(10)##/ driverKKM.ContinuePrint();/##CHR(13)##//##CHR(10)##/ // }/##CHR(13)##//##CHR(10)##/ // ELSE/##CHR(13)##//##CHR(10)##/ // {/##CHR(13)##//##CHR(10)##/ // ТекстОтвета = "Фискальный регистратор находится в режиме ожидания продолжения печати." + СИМВОЛПОКОДУ(13) + " Требуется завершить печать предыдущего чека.";/##CHR(13)##//##CHR(10)##/ // СООБЩЕНИЕ(ТекстОтвета,,0);/##CHR(13)##//##CHR(10)##/ // Error = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ // }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ERROR == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///завершение проверки чековой ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/IF (_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка при открытии чека");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/// 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/// 2 - имя кассира/##CHR(13)##//##CHR(10)##/// 3 - система налогообложения/##CHR(13)##//##CHR(10)##///driverKKM.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##///driverKKM.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##///IF ( driverKKM.Value == 1 )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = 1021;/##CHR(13)##//##CHR(10)##/ driverKKM.TagType = 7; //строка/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = 18;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = 5;/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаСоСкидкой;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.Sale( ) <> 0;/##CHR(13)##//##CHR(10)##/// Если ошибка, то возвращаем безнал/##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтменаАвторизации( "Регистрация" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаСоСкидкой;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ReturnSale( ) <> 0;/##CHR(13)##//##CHR(10)##/// Если ошибка, то возвращаем безнал/##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтменаАвторизации( "Возврат" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроцентСкидки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ПроцентСкидки*Количество*Цена/100;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Скидка на позицию";/##CHR(13)##//##CHR(10)##/ driverKKM.Discount( );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = СуммаКредит;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Поправка = 0.00;/##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = 0;//ПРОЦЕНТСКИДКИ + Поправка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ошибка закрытия чека, то возвращаем безнал/##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтменаАвторизации( "Закрытие чека" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/driverKKM.RepeatDocument();',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаОплаты;/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.DiscountOnCheck = ПроцентСкидки;/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CloseCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ошибка, то возвращаем безнал/##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОтменаАвторизации( "Оплата чека" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.CutType = true; //неполная отрезка/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/driverKKM.RepeatDocument();',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = 36;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = 1; //неполная отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'24.04.2018 18:11:29') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих-онлайн (ФН) v.3 с платежной системой Атол','ФР',0.00000000,'',0.00000000,219.00000000,0,'',0.00000000,'','',0,'39C5F7C0-6AD9-41B6-9186-CA71FA66CFC1',0,1,0,'24.04.2018 18:11:29') #begin #description Обмен данными между Айтида и Эвотор v.3.7.1 #name Обмен данными между Айтида и Эвотор v.3.7.1 #code 0000000131 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##///ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "evotor_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = HTTPGET(Соединение, АдресРесурса, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных. Проверьте соответсвие магазина в Эвотор и склада в карточке торгового оборудования";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ""; // передаем пустое тело в запросе для очистки всех товаров/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products/delete";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF (( Ответ1 <> 200 ) AND (Ответ1<>""))/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/// _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось отправить запрос на удаление всех товаров в облако Эвотор.";/##CHR(13)##//##CHR(10)##/// //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/// //RETURN false;/##CHR(13)##//##CHR(10)##/// } /##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", "");/##CHR(13)##//##CHR(10)##/ RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", ""), "/", " "), "\", " ");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = КОЛИЧЕСТВОСТРОК("СписокПапок");/##CHR(13)##//##CHR(10)##/н=0;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ н++;/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ic + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ //code = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) ); //код/##CHR(13)##//##CHR(10)##/ //barCodes[0] = ""; //массив штрихкодов/##CHR(13)##//##CHR(10)##/ //alcoCodes[0] = ""; //массив алкокодов/##CHR(13)##//##CHR(10)##/ _name = LEFT( XMLTRANS( ALLTRIM( name )), 100); //наименование/##CHR(13)##//##CHR(10)##/ //price = 0; //цена продажи/##CHR(13)##//##CHR(10)##/ //quantity = 0; //остаток/##CHR(13)##//##CHR(10)##/ //costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ //measureName = ""; //наименование единицы/##CHR(13)##//##CHR(10)##/ //tax = "NO_VAT"; //ставка налога/##CHR(13)##//##CHR(10)##/ allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/ //description = ""; //описание товара/##CHR(13)##//##CHR(10)##/ //articleNumber = ""; //артикул/##CHR(13)##//##CHR(10)##/ hasVariants = "false";/##CHR(13)##//##CHR(10)##/ parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/ group = "true"; //является группой/##CHR(13)##//##CHR(10)##/ //_type = "NORMAL"; //тип товара/##CHR(13)##//##CHR(10)##/ //alcoholByVolume = 0; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ //alcoholProductKindCode = 0; //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ //tareVolume = 0; //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",code,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",_name,",",true); /##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,Разделитель,true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"hasVariants",hasVariants,",",false);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,"",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ IF (н <= КоличествоЭлементов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'н=0; /##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(code) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "VAT_10"; //НДС 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "VAT_18"; //НДС 18%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "VAT_0"; //НДС 0%/##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), "/", ""), "\",""), ";"," "), """", ""), CHR(13),""), CHR(10),""), CHR(13)+CHR(10)," ");/##CHR(13)##//##CHR(10)##/ RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", ""), "/", " "), "\", " ");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/GENERATEUUID = false;/##CHR(13)##//##CHR(10)##/IF (f_razr == 1 AND (aspecttype == 2 OR aspecttype == 0))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ GENERATEUUID = true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##///СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/н++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprnn WHERE nn = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')");/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT guid FROM evotorrelations WHERE maincode = ''" + code + "''");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!GENERATEUUID)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO evotorrelations (maincode, guid)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + code + "'', ''" + uuid + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code ); //код/##CHR(13)##//##CHR(10)##/barCodes[0] = ALLTRIM( barcode ); //массив штрихкодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, nnvid, d_litr, a_proc, dbo.fn_getalcocodes(nn) as alcocodes/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/name = XMLTRANS(STDF(ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) )));/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = XMLTRANS(STDF(ALLTRIM( cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) )));/##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = ТоварИнфо.d_litr;/##CHR(13)##//##CHR(10)##/mAProc = ТоварИнфо.a_proc;/##CHR(13)##//##CHR(10)##/alcoCodes[0] = alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/price = ALLTRIM( STR( cena, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/quantity = ALLTRIM( STR( kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/measureName = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = mEdn; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = "шт";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( kodn )], "NO_VAT"); //налоги/##CHR(13)##//##CHR(10)##/allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/description = mCname; //описание товара/##CHR(13)##//##CHR(10)##/articleNumber = ALLTRIM(article); //артикул/##CHR(13)##//##CHR(10)##/parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/group = "false"; //является ли группой/##CHR(13)##//##CHR(10)##/_type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL_NOT_MARKED", ЕСЛИ(mAlco,"ALCOHOL_MARKED","NORMAL")); //тип товара/##CHR(13)##//##CHR(10)##/alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/IF (н > 1) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##///тэги/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",mCode,",",true);/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",name,",",true); /##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##///IF (н < КоличествоЭлементов)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'СтрокаТоваров = СтрокаТоваров + "]"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "]");/##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "Content-Encoding:gzip";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Заголовки[] = "Content-Length:"+ФАЙЛРАЗМЕР(ДескрипторФайла);/##CHR(13)##//##CHR(10)##///Заголовки[] = "Accept: application/json";/##CHR(13)##//##CHR(10)##///Заголовки[] = "Charset:UTF-8";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Соединение = HTTPСоединить( "https://api.evotor.ru" );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в облако Эвотор");/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с облаком Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в облако Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/Соединение = false;/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ФайлЖурнала = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS code, '''' AS reason, '''' AS subject, '''' AS value SET FMTONLY OFF","Ошибки");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("Ошибки","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("Ошибки" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##/СтрокаОшибок = "";/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Ошибки" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ALLTRIM(Ошибки.code);/##CHR(13)##//##CHR(10)##/ ПричинаОшибки = ALLTRIM(Ошибки.reason);/##CHR(13)##//##CHR(10)##/ ОбъектОшибки = ALLTRIM(Ошибки.subject);/##CHR(13)##//##CHR(10)##/ ЗначениеОшибка = ALLTRIM(Ошибки.value);/##CHR(13)##//##CHR(10)##/ СтрокаОшибок = СтрокаОшибок + " Код ошибки: " + КодОшибки + ". Причина ошибки: " + ПричинаОшибки + ". Объект ошибки: " + ОбъектОшибки + ". Недопустимое значение: " + ЗначениеОшибка; /##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(Ответ1))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( Ответ1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаОшибок))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( СтрокаОшибок );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_in))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "evotor_in_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу+ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_in, RAT(path_in, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT(path_in, LEN(path_in)-RAT(path_in,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##///запрос списка магазинов/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///запрос списка устройств/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/devices/search";/##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS name, '''' AS storeUuid SET FMTONLY OFF","СписокТерминалов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокТерминалов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДТЕРМИНАЛА = СписокТерминалов.uuid;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕТЕРМИНАЛА = ALLTRIM(СписокТерминалов.name);/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНАТЕРМИНАЛА = СписокТерминалов.storeUuid;/##CHR(13)##//##CHR(10)##/ IF ((УИДМАГАЗИНАТЕРМИНАЛА == УИДМАГАЗИНА) AND (ИМЯОБОРУДОВАНИЯ == НАЗВАНИЕТЕРМИНАЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДТЕРМИНАЛА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить терминал для получения данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF (ПЕРИОДЗАГРУЗКИ == 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( КОНЕЦПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( КОНЕЦПЕРИОДА, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "";/##CHR(13)##//##CHR(10)##/ device = "?&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ELSE/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/ //RETURN true;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Загрузка прервана.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[0] = "SELL";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[1] = "PAYBACK";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[4] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[5] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[6] = "WRITE_OFF";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[8] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[9] = "FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[10] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[14] = "ACCEPT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[15] = "RETURN";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[16] = "INVENTORY";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[17] = "REVALUATION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[18] = "OPEN_TARE";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[11] = "REGISTER_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[14] = "POSITION_TAX";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[15] = "DISCOUNT_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[35] = "DISCOUNT_DOCUMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[40] = "PAYMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[42] = "DOCUMENT_OPEN";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[45] = "DOCUMENT_CLOSE_FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[50] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[51] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[55] = "DOCUMENT_CLOSE";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[60] = "FPRINT_X_REPORT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[61] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[62] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[63] = "FPRINT_Z_REPORT";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[1] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[4] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[5] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[6] = "003";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[8] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[9] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[10] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[14] = "001";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[15] = "055";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[16] = "007";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[17] = "005";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[18] = "046";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[19] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[20] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[0] = "CASH";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[1] = "CARD";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##///MESSAGEBOX( Ответ );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/IF ( ФайлЗагрузки == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл загрузки ''" + ALLTRIM( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ(ФайлЗагрузки, JSONстрока);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 20 ) AS doctype, SPACE( 30 ) AS saletype, '''' AS docuuid, '''' AS deviceid, '''' AS type, '''' AS commodityName, CONVERT( datetime, '''' ) AS creationDate,'''' AS id, '''' AS userCode, '''' AS userUuid,/##CHR(13)##//##CHR(10)##/CONVERT(datetime, '''') AS closeDate, CONVERT(datetime, '''') AS openDate, '''' AS openUserCode, '''' AS openUserUuid, '''' AS closeUserCode,/##CHR(13)##//##CHR(10)##/'''' AS closeUserUuid, '''' AS sessionUUID, '''' AS sessionNumber, '''' AS number, '''' AS closeResultSum, '''' AS closeSum, '''' AS sum, '''' AS storeUuid, '''' AS completeInventory,/##CHR(13)##//##CHR(10)##/'''' AS version, '''' AS baseDocumentNumber, '''' AS baseDocumentUUID, '''' AS clientName, '''' AS clientPhone, '''' AS couponNumber,/##CHR(13)##//##CHR(10)##/'''' AS alcoholByVolume, '''' AS alcoholProductKindCode, '''' AS balanceQuantity, '''' AS barcode, '''' AS commodityCode, '''' AS commodityUuid, '''' AS commodityType, /##CHR(13)##//##CHR(10)##/'''' AS costPrice, '''' AS fprintSection, '''' AS mark, '''' AS measureName,'''' AS tareVolume,'''' AS price, '''' AS quantity, '''' AS resultPrice,/##CHR(13)##//##CHR(10)##/'''' AS resultSum, '''' AS resultTaxSum, '''' AS tax, '''' AS taxPercent, '''' AS taxRateCode, '''' AS taxSum, '''' AS paymentType, '''' AS rrn, '''' AS documentNumber,/##CHR(13)##//##CHR(10)##/'''' AS receiptNumber, '''' AS proceeds,'''' AS cash,'''' AS collection, '''' AS cashIn,'''' AS cashOut, '''' AS total, '''' AS cashInQuantity, '''' AS cashOutQuantity,/##CHR(13)##//##CHR(10)##/'''' AS revenue, '''' AS sessionSalesResults, '''' AS sessionPurchasesResults, '''' AS nonzeroSumSales, '''' AS nonzeroSumPurchases, '''' AS quantitySalesQuantity,/##CHR(13)##//##CHR(10)##/'''' AS quantitySalesReversal,'''' AS quantitySalesBack, '''' AS reversalBack, '''' AS zreportNumber; SET FMTONLY OFF", "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаИнициализации = "commodityName=''''; ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DocumentTypes = "''SELL'' , ''PAYBACK'' , ''CASH_INCOME'' , ''CASH_OUTCOME'' , ''OPEN_SESSION'' , ''FPRINT'' , ''CLOSE_SESSION'' , ''INVENTORY'' , ''ACCEPT'' , ''RETURN'' , ''WRITE_OFF'' , ''REVALUATION'' , ''OPEN_TARE''";/##CHR(13)##//##CHR(10)##/TransactionTypes = "''DISCOUNT_DOCUMENT'' , ''DISCOUNT_POSITION'' , ''DISCOUNT_DOCUMENT_POSITION'' , ''DOCUMENT_OPEN'' , ''DOCUMENT_CLOSE'' , ''DOCUMENT_CLOSE_FPRINT'' , ''REGISTER_POSITION'' , ''REGISTER_BILLS'' ,/##CHR(13)##//##CHR(10)##/''CASH_INCOME'' , ''CASH_OUTCOME'' , ''INVENTORY'' , ''PAYMENT'' , ''OPEN_SESSION'' , ''CLOSE_SESSION'' , ''FPRINT_OPEN_SESSION'' , ''FPRINT_X_REPORT'' , ''FPRINT_Z_REPORT'' , ''POSITION_TAX'' , ''REVALUATION''";/##CHR(13)##//##CHR(10)##/doctype = "";/##CHR(13)##//##CHR(10)##/saletype = "";/##CHR(13)##//##CHR(10)##/docuuid = "";/##CHR(13)##//##CHR(10)##/Скрипт = "IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + DocumentTypes + " ) ) /##CHR(13)##//##CHR(10)##/ doctype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + TransactionTypes + " ) ) /##CHR(13)##//##CHR(10)##/ saletype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''uuid'' AND ЗначениеПоля <> ''null'' )/##CHR(13)##//##CHR(10)##/ docuuid = ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ ЗначениеПоля";/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad; /##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокФР" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КоличествоСтрок( "Магазины" );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Магазины");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Магазины" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбщаяСумма = 0;/##CHR(13)##//##CHR(10)##/ Наличность = 0;/##CHR(13)##//##CHR(10)##/ СуммаСмены = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = 0;/##CHR(13)##//##CHR(10)##/ Инкассация = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docuuid = Магазины.docuuid;/##CHR(13)##//##CHR(10)##/ //------ Если документ пустой - пропускаем /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docuuid ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doctype = Магазины.doctype;/##CHR(13)##//##CHR(10)##/ saletype = Магазины.saletype;/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ tranzType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 63)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСВИЕТРАНЗАКЦИЙ[i] == saletype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = STR(i); //saletype/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = Магазины.creationDate; /##CHR(13)##//##CHR(10)##/ tranzDate = LEFT(TTOC( ДАТАДОКУМЕНТА, 4),10);/##CHR(13)##//##CHR(10)##/ tranzTime = ALLTRIM(TTOC( ДАТАДОКУМЕНТА, 8));/##CHR(13)##//##CHR(10)##/ POSNumber = 1;//Магазины.deviceid;/##CHR(13)##//##CHR(10)##/ chequeNumber = Если(Магазины.receiptNumber=="",0,Магазины.receiptNumber);/##CHR(13)##//##CHR(10)##/ Seller = 0;//GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ paymentType = Магазины.paymentType;/##CHR(13)##//##CHR(10)##/ paymentTypeInt = ЕСЛИ(paymentType=="",0,ЕСЛИ(СООТВЕТСВИЕОПЛАТ[0]==paymentType,0,1));/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = Магазины.price;/##CHR(13)##//##CHR(10)##/ Quantity = Магазины.quantity;/##CHR(13)##//##CHR(10)##/ Наличность = Магазины.cash;/##CHR(13)##//##CHR(10)##/ Инкассация = Магазины.collection;/##CHR(13)##//##CHR(10)##/ СуммаОтчет = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = Магазины.revenue;/##CHR(13)##//##CHR(10)##/ СуммаСмены = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = Магазины.closeSum;/##CHR(13)##//##CHR(10)##/ zReportNumber = Если(Магазины.zReportNumber=="",0,VAL(Магазины.zReportNumber));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 18)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСТВИЕОПЕРАЦИЙ[i] == doctype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequeType = STR(i); //doctype/##CHR(13)##//##CHR(10)##/ dockIndCode = СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[i];/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ecrSession = Магазины.sessionNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Магазины.resultPrice;/##CHR(13)##//##CHR(10)##/ SummWD = Магазины.resultSum;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = Магазины.mark;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ЕСЛИ(Магазины.barcode==''null'' OR Магазины.barcode=="","",Магазины.barcode));/##CHR(13)##//##CHR(10)##/ Summ = Магазины.sum;/##CHR(13)##//##CHR(10)##/ currency = 0;/##CHR(13)##//##CHR(10)##/ education = 0;/##CHR(13)##//##CHR(10)##/ commentCode = 0;/##CHR(13)##//##CHR(10)##/ universalNDOK = Магазины.documentNumber;/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (tranztype == "40" AND paymentTypeInt == 0 AND VAL(Summ) < 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "61" AND sessionclosecount < 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sessionclosecount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "63" AND (zReportNumber == 0))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(chequeNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequeNumber = " + chequeNumber + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(universalNDOK))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ndok = ''" + universalNDOK + "'' WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ecrSession))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ecrSession = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ksnum = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF (tranzType == "61")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаСмены);/##CHR(13)##//##CHR(10)##/ kolp = 0;/##CHR(13)##//##CHR(10)##/ summa = VAL(СуммаСмены);/##CHR(13)##//##CHR(10)##/ summasale = VAL(СуммаСмены); /##CHR(13)##//##CHR(10)##/ sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranzType == "63")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ //chequeNumber = zReportNumber;/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаОтчет);/##CHR(13)##//##CHR(10)##/ kolp = VAL(Наличность);/##CHR(13)##//##CHR(10)##/ summa = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ summasale = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND paymentTypeInt == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", "008" )))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ kkmsklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name AS name, s.ed AS ed, s.kodn AS ТОВАРИНФО, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ kkmsklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "046" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = kkmsklad;/##CHR(13)##//##CHR(10)##/ kkmsklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + kkmsklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype = " + tranzType);/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber + " AND transtype = " + tranzType );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины")/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,0,0,'26.12.2018 16:40:58') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными между Айтида и Эвотор v.3.7.1','ККМ',0.00000000,'',0.00000000,4732.00000000,0,'',0.00000000,'','',0,'BE2391AF-51DA-43F0-90BC-5A26A92C3396',0,1,0,'26.12.2018 16:40:58') #begin #description Обмен данными с Фронтол 5.2 (выгрузка картинок папок) #name Обмен данными с Фронтол 5.2 (выгрузка картинок папок) #code 0000000132 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT note, ex_info FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND ic = ''" + СписокПапок.ic + "''","ПапкаИнфо",1);/##CHR(13)##//##CHR(10)##/ РасширениеКартинки = "jpg";/##CHR(13)##//##CHR(10)##/ IF (!Пусто(ПапкаИнфо.note))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РасширениеКартинки = RIGHT(ALLTRIM(ПапкаИнфо.note), LEN(ALLTRIM(ПапкаИнфо.note))-RAT(ALLTRIM(ПапкаИнфо.note),"."));/##CHR(13)##//##CHR(10)##/ ФАЙЛКОПИРОВАТЬ(ALLTRIM(ПапкаИнфо.note),ПутьВыгрузкиКартинок+"folder_"+ALLTRIM(СписокПапок.ic)+"."+РасширениеКартинки,true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПапкаИнфо");/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( СписокПапок.ic ) + IIF( СписокПапок.ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( СписокПапок.name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( СписокПапок.name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( СписокПапок.parent ), 0, ABS( СписокПапок.parent ) + IIF(СписокПапок.ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;"+"folder_"+ALLTRIM(СписокПапок.ic)+"."+РасширениеКартинки+";;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем 20 секунд появления LoadResult.txt/##CHR(13)##//##CHR(10)##///Время = TickCount( );/##CHR(13)##//##CHR(10)##///WHILE ( !ФАЙЛ( ФайлОтветаФронтол ) && TickCount( ) - Время < 20000 ) Ожидание( 1000 );/##CHR(13)##//##CHR(10)##///IF ( ФАЙЛ( ФайлОтветаФронтол ) )/##CHR(13)##//##CHR(10)##/// ВЫПОЛНИТЬ( "notepad", ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( STR( koef, 16, 4 ), ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, egais.alcocode/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, СписокАлкокодов.maincode + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, sprres.d_litr, sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mCname = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( VAL( GetWord( string, ";", ";", 6 ) ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( chequeType <> "0" ) docid ++;/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ // ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлОтветаФронтол = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) ) + "LoadResult.txt";/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьВыгрузкиКартинок = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьВыгрузкиКартинок = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:58:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (выгрузка картинок папок)','ККМ',0.00000000,'',0.00000000,4716.00000000,0,'',0.00000000,'','',0,'B3932A3F-1627-4765-BE02-5A9F73DE57C1',0,1,0,'08.04.2019 15:58:31') #begin #description Обмен данными с Фронтол 5.2 (склады как предприятия с остатками по всем складам) #name Обмен данными с Фронтол 5.2 (склады как предприятия с остатками по всем складам) #code 0000000133 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/КоличествоСкладов = VAL(ЗАПРОС("SELECT count(code) FROM sprskl WHERE notavail = 0 AND folder = 0"));/##CHR(13)##//##CHR(10)##/Учет = "''001''";/##CHR(13)##//##CHR(10)##/СтрокаСкладов = ";";/##CHR(13)##//##CHR(10)##/Разделитель = ";";/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Расчет остатков по складам");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, ISNULL( sprres_g.paytype, '''' ) AS paytype, sprres.f_make ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса = ТекстЗапроса + ", CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintChek,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintCopy,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintInvoice,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintMark "; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса = ТекстЗапроса + ", dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS vizualmodif,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ЛеваяГраница,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ПраваяГраница ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT code FROM sprskl WHERE notavail = 0 AND folder = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст("СписокСкладов");/##CHR(13)##//##CHR(10)##/WHILE (!КонецКонтекста("СписокСкладов"))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаСкладов = СтрокаСкладов + ALLTRIM(СписокСкладов.code) + Разделитель;/##CHR(13)##//##CHR(10)##/ ТекстЗапроса = ТекстЗапроса + ", dbo.fn_calcsklad(temp.nn,GETDATE(),''" + СписокСкладов.code + "''," + Учет + ",'''') AS Ostatok" + ALLTRIM(СписокСкладов.code) + ",/##CHR(13)##//##CHR(10)##/ dbo.fn_calcsklad_cena(temp.nn,GETDATE(),''" + СписокСкладов.code + "''," + Учет + ") AS Cena" + ALLTRIM(СписокСкладов.code);/##CHR(13)##//##CHR(10)##/ Пропустить(1, "СписокСкладов");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст("СписокСкладов");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = ТекстЗапроса + " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode /##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Выгрузка товаров в ККМ");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) + "" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/ mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), sprres_shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mAlco = VAL( nnvid ) > 0 AND VAL( nnvid ) < 500 AND !ВСПИСКЕ( VAL( nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( nnvid ) >= 500 OR ВСПИСКЕ( VAL( nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 AND VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( f_make )/##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = STDE( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/ mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ //mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ н=1;/##CHR(13)##//##CHR(10)##/ WHILE (н <= КоличествоСкладов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодСклада = ПОЛУЧИТЬСЛОВО(СтрокаСкладов,";",н);/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ВЫЧИСЛИТЬ("Ostatok"+ALLTRIM(КодСклада));/##CHR(13)##//##CHR(10)##/ mCena = ВЫЧИСЛИТЬ("Cena"+ALLTRIM(КодСклада));/##CHR(13)##//##CHR(10)##/ КодПредприятия = STR(VAL(КодСклада));/##CHR(13)##//##CHR(10)##/ н++; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";" + КодПредприятия + ";;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем 20 секунд появления LoadResult.txt/##CHR(13)##//##CHR(10)##///Время = TickCount( );/##CHR(13)##//##CHR(10)##///WHILE ( !ФАЙЛ( ФайлОтветаФронтол ) && TickCount( ) - Время < 20000 ) Ожидание( 1000 );/##CHR(13)##//##CHR(10)##///IF ( ФАЙЛ( ФайлОтветаФронтол ) )/##CHR(13)##//##CHR(10)##/// ВЫПОЛНИТЬ( "notepad", ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( STR( koef, 16, 4 ), ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, egais.alcocode/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, СписокАлкокодов.maincode + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлОтветаФронтол = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) ) + "LoadResult.txt";/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + "", "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///выгружаем склады как предприятия/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT code, name, address FROM sprskl WHERE notavail = 0 AND folder = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст("СписокСкладов");/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDENTERPRISES" );/##CHR(13)##//##CHR(10)##/WHILE (!КонецКонтекста("СписокСкладов"))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR(VAL(code)) + ";;" + STDE( name ) + ";" + STDE( name ) + ";" + STDE( LEFT(address,1024) ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкладов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( VAL( GetWord( string, ";", ";", 6 ) ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( chequeType <> "0" ) docid ++;/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " WHERE chequeNumber= " + chequeNumber + " AND ecrNumber= " + ecrNumber + " AND /##CHR(13)##//##CHR(10)##/ transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrNumber= " + ecrNumber + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ // ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'08.04.2019 15:59:28') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2 (склады как предприятия с остатками по всем складам)','ККМ',0.00000000,'',0.00000000,4736.00000000,0,'',0.00000000,'','',0,'70631B0D-6492-43DE-A84A-DBC2A6A81A7F',0,1,0,'08.04.2019 15:59:28') #begin #description Профиль ФР Штрих-онлайн (ФН, ФФД 1.05) v.3 #name Профиль ФР Штрих-онлайн (ФН, ФФД 1.05) v.3 #code 0000000134 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Печать может производиться на несколько ФР. Поэтому надо выбрать нужный и к нему подключиться/##CHR(13)##//##CHR(10)##/НОМЕРУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = НОМЕРУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ14 = ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 );/##CHR(13)##//##CHR(10)##/driverKKM.Summ15 = ROUND( ВСЕГОКРЕДИТ, 2 );/##CHR(13)##//##CHR(10)##/driverKKM.Summ16 = ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##///driverKKM.TaxType = СистемаНО;/##CHR(13)##//##CHR(10)##/driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'//Печать строки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Строка строка для печати,/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = PrintString;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УничтожатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтожатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтожатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИндексУстройства;/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverKKM" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* Закомментировано до обновления 2011-06-15/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "SESSION")/##CHR(13)##//##CHR(10)##/ RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/IF (КодСтатуса == "MODE")/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.ECRMode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'Public СистемаНО;/##CHR(13)##//##CHR(10)##///Открыть чек./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ТипЧека число целое, тип открываемого чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЕГАИСURL = ЕгаисUrl.url;/##CHR(13)##//##CHR(10)##/ ЕГАИСSIGN = ЕгаисUrl.sign;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( ЕГАИС_ОТВЕТ );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ЕГАИС_ОТВЕТ;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Print2DBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСURL;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕГАИСSIGN;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##///driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##///driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##///driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клише/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клише/##CHR(13)##//##CHR(10)##/УстановилиСНО = false;/##CHR(13)##//##CHR(10)##/СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = 18;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = 5;/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable( );/##CHR(13)##//##CHR(10)##/ УстановилиСНО = true;/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УстановилиСНО = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УстановилиКассира = false;/##CHR(13)##//##CHR(10)##///запишем кассира в таблицу ККМ для его правильной установки в чеке/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldString = LEFT( _ИМЯКАССИРА, 64 );/##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable( );/##CHR(13)##//##CHR(10)##/ УстановилиКассира = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УстановилиКассира = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УстановилиПризнакЭЧ = false;/##CHR(13)##//##CHR(10)##///установим признак электронного чека/##CHR(13)##//##CHR(10)##/IF (ЭЛЕКТРОННЫЙЧЕК)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = 17;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = 7;/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable( );/##CHR(13)##//##CHR(10)##/ УстановилиПризнакЭЧ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УстановилиПризнакЭЧ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.CheckType = ЕСЛИ( ТипЧека == 1, 2, 0 );/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/// 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/// 2 - имя кассира/##CHR(13)##//##CHR(10)##/// 3 - система налогообложения/##CHR(13)##//##CHR(10)##///driverKKM.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##///driverKKM.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##///IF ( driverKKM.Value == 1 )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ driverKKM = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///установим кассира/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = 7; //строка/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ driverKKM.password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag( ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///установим ИНН кассира/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = 7; //строка/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ driverKKM.password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag( ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ЗАПРОС( "SELECT ISNULL(sprres_g.rsubject,0)/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''"));/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида]; /##CHR(13)##//##CHR(10)##/СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаСоСкидкой;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = НАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ );/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидки <> 0) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = СуммаСкидки; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -СуммаСкидки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.FNDiscountOperation( );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = СпособРасчета;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПродажи;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/}',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##///Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##///ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ЗАПРОС( "SELECT ISNULL(sprres_g.rsubject,0)/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''"));/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида]; /##CHR(13)##//##CHR(10)##/СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Quantity = Количество;/##CHR(13)##//##CHR(10)##/driverKKM.Price = ЦенаСоСкидкой;/##CHR(13)##//##CHR(10)##/// длина строки в методе Sale не должна превышать 40 символов/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = LEFT(НАИМЕНОВАНИЕ, 40);/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = НАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Department = 1;/##CHR(13)##//##CHR(10)##/КодНалога = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалога = ЕСЛИ( КодНалога == ''01'', 2, ЕСЛИ( КодНалога == ''04'', 1, 4 ) );/##CHR(13)##//##CHR(10)##/driverKKM.Tax1 = КодНалога;/##CHR(13)##//##CHR(10)##/driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидки <> 0) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( СуммаСкидки > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = СуммаСкидки; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -СуммаСкидки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.FNDiscountOperation( );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0; /##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = СпособРасчета;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПродажи;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Наличными/##CHR(13)##//##CHR(10)##/driverKKM.Summ1 = СуммаНал;/##CHR(13)##//##CHR(10)##/// Кредитом (Оплата 1)/##CHR(13)##//##CHR(10)##/driverKKM.Summ2 = СуммаБезнал;/##CHR(13)##//##CHR(10)##/driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Summ14 = ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 );/##CHR(13)##//##CHR(10)##/driverKKM.Summ15 = ROUND( ВСЕГОКРЕДИТ, 2 );/##CHR(13)##//##CHR(10)##/driverKKM.Summ16 = ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##///driverKKM.TaxType = СистемаНО;/##CHR(13)##//##CHR(10)##/driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/// строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.ResultCode <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/startTime = TIME( );/##CHR(13)##//##CHR(10)##/// Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverKKM;/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = НомерУстройства; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///PUBLIC ClicheString1;/##CHR(13)##//##CHR(10)##///ClicheString1 = " Salepoint №1.";/##CHR(13)##//##CHR(10)##///PUBLIC ClicheString2;/##CHR(13)##//##CHR(10)##///ClicheString2 = " You are welcome!";/##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.OpenSession( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'09.07.2018 15:38:30') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих-онлайн (ФН, ФФД 1.05) v.3','ФР',0.00000000,'',0.00000000,5766.00000000,0,'',0.00000000,'','',0,'EA77BEA5-47EF-43F2-A49B-19722B8A388D',0,1,0,'07.08.2018 9:44:56') #begin #description ТСД в формате SCANCODE #name ТСД в формате SCANCODE #code 0000000135 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1.00000000,'//Инициализация ТСД/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_ERRORSTRING, _SCANCODE_ERRORCODE;/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_GOODSPATH, _SCANCODE_ORDERSPATH;/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_PODBOROUTPATH;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_SCANCODE_GOODSPATH = "C:\SCANCODE\GOODS\";/##CHR(13)##//##CHR(10)##/_SCANCODE_PODBOROUTPATH = "C:\SCANCODE\PODBOR\OUT\";/##CHR(13)##//##CHR(10)##/_SCANCODE_PODBORINPATH = "C:\SCANCODE\PODBOR\IN\";/##CHR(13)##//##CHR(10)##/_SCANCODE_ORDERSPATH = "C:\SCANCODE\ORDERS\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_SCANCODE_ERRORSTRING = "Нет ошибок";/##CHR(13)##//##CHR(10)##/_SCANCODE_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',2.00000000,'//Очистка ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',3.00000000,'//Инициализация выгрузки в ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',6.00000000,'//Окончание выгрузки в ТСД/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',7.00000000,'//Инициализация загрузки из ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для выполнения внешнего файла необходимо убрать комментарий у следующей строки и ввести выполняемую команду./##CHR(13)##//##CHR(10)##///Выполнить( "cmd", "/C d:\bat.bat d:\file1.txt d:\file2.txt", "", "", 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Читаем все файлы из каталога SCANCODE\ORDERS/##CHR(13)##//##CHR(10)##/// Содержимое всех файлов переносим во временную таблицу /##CHR(13)##//##CHR(10)##/_SCANCODE_TEMP_TABLE = "#" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + _SCANCODE_TEMP_TABLE + "( docid int, ndok varchar(20), barcode varchar(50), cena float, kolp float, identity_column int IDENTITY(1,1) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлДокумента = ФайлНайти( _SCANCODE_ORDERSPATH + "*.*" );/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/ndok = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( ФайлДокумента ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docid++;/##CHR(13)##//##CHR(10)##/ ndok = SUBSTR( ФайлДокумента, RAT( ФайлДокумента, "\" ) + 1);/##CHR(13)##//##CHR(10)##/ IF ( AT( ndok, "." ) > 0 )/##CHR(13)##//##CHR(10)##/ ndok = SUBSTR( ndok, 1, AT( ndok, "." ) - 1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗагрузки = ФайлОткрыть( ФайлДокумента );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЗагрузки < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORSTRING = "Не удалось открыть файл для загрузки данных " + ФайлДокумента;/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORCODE = -2;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE( !ФайлКонецФайла( ФайлЗагрузки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаФайла = ФайлПрочитать( ФайлЗагрузки, "S" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СтрокаФайла ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаФайла = "," + СтрокаФайла;/##CHR(13)##//##CHR(10)##/ barcode = GetWord( СтрокаФайла, ",", ",", 1 );/##CHR(13)##//##CHR(10)##/ --cena = VAL( GetWord( СтрокаФайла, ",", ",", 2 ) );/##CHR(13)##//##CHR(10)##/ --kolp = VAL( GetWord( СтрокаФайла, ",", ",", 3 ) );/##CHR(13)##//##CHR(10)##/ cena = 0;/##CHR(13)##//##CHR(10)##/ kolp = VAL( GetWord( СтрокаФайла, ",", ",", 2 ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _SCANCODE_TEMP_TABLE + "( docid, ndok, barcode, cena, kolp ) /##CHR(13)##//##CHR(10)##/ VALUES ( " + docid+ ", ''" + STDF( ndok, 20 ) + "'', ''" + STDF( barcode, 50 ) + "'', " + STR( cena, 20, 8 ) + ", " + STR( kolp, 20, 8 ) + ")" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##/ ФайлДокумента = ФайлНайтиСледующий( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Достаем данные из полученной временной таблицы/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT * FROM " + _SCANCODE_TEMP_TABLE + " ORDER BY identity_column", "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + _SCANCODE_TEMP_TABLE );',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',8.00000000,'//Чтение записи из ТСД/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/Перейти( НОМЕРЗАПИСИ - 1, "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',9.00000000,'//Чтение поля данных из ТСД/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( ИНДЕКСПОЛЯ == 0, docid, ЕСЛИ( ИНДЕКСПОЛЯ == 1, ndok, ЕСЛИ( ИНДЕКСПОЛЯ == 2, barcode,kolp ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',10.00000000,'//Окончание загрузки из ТСД/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',11.00000000,'//Текст ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN _SCANCODE_ERRORSTRING;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',12.00000000,'//Признак наличия ошибки драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN _SCANCODE_ERRORCODE <> 0;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',13.00000000,'//Количество полей в текущей таблице ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',14.00000000,'//Количество записей в ТСД/##CHR(13)##//##CHR(10)##/RETURN КоличествоСтрок( "SCANCODE_UPLOADLIST" );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Обработка выгрузки данных в ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Инициализация ТСД/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_ERRORSTRING, _SCANCODE_ERRORCODE;/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_GOODSPATH, _SCANCODE_ORDERSPATH;/##CHR(13)##//##CHR(10)##/PUBLIC _SCANCODE_PODBOROUTPATH;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_SCANCODE_GOODSPATH = "C:\SCANCODE\GOODS\";/##CHR(13)##//##CHR(10)##/_SCANCODE_PODBOROUTPATH = "C:\SCANCODE\PODBOR\OUT\";/##CHR(13)##//##CHR(10)##/_SCANCODE_PODBORINPATH = "C:\SCANCODE\PODBOR\IN\";/##CHR(13)##//##CHR(10)##/_SCANCODE_ORDERSPATH = "C:\SCANCODE\ORDERS\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_SCANCODE_ERRORSTRING = "Нет ошибок";/##CHR(13)##//##CHR(10)##/_SCANCODE_ERRORCODE = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Все действия по выгрузке товаров и / или накладной производим в этом методе./##CHR(13)##//##CHR(10)##/// Если передан идентификатор накладной, то выгружаем документ. /##CHR(13)##//##CHR(10)##/// Иначе выгружаем список переданных товаров/##CHR(13)##//##CHR(10)##/Разделитель = ";";/##CHR(13)##//##CHR(10)##/IF ( _DOCID == 0 OR ПУСТО( _DOCCODE ) == "" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT nn, name, cena FROM " + _ИМЯТАБЛИЦЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяФайла = _SCANCODE_GOODSPATH + "PERED.TXT";/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки = ФайлСоздать( ИмяФайла, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ФайлВыгрузки 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORSTRING = "Не удалось создать файл для выгрузки данных " + ИмяФайла;/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORCODE = -1;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT bc AS barcode FROM sprnnbc WHERE nn= ''" + СписокТоваров.nn + "'' AND bc <> '''' /##CHR(13)##//##CHR(10)##/ UNION SELECT barcode FROM sprres_ed WHERE code= ''" + СписокТоваров.nn + "'' AND barcode <> ''''", "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокШтриховыхКодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + Разделитель + ALLTRIM( STRTRAN( СписокТоваров.name, ",", "" ) ) + Разделитель + STR( СписокТоваров.cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Определяем номер выгружаемого документа. Файл бедет создан с таким же именем/##CHR(13)##//##CHR(10)##/ НомерДокумента = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + _DOCCODE + "'' AND ic= " + _DOCID );/##CHR(13)##//##CHR(10)##/ ИмяФайла = ЕСЛИ( _DOCCODE == "001" OR _DOCCODE == "019", _SCANCODE_PODBORINPATH, _SCANCODE_PODBOROUTPATH ) + ALLTRIM( НомерДокумента ) + ".txt";/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT spec.nn, spr.name, spec.cena, spec.kolp, spec.identity_column/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn spr ON spec.nn = spr.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.code = ''" + _DOCCODE + "'' AND spec.ic = " + _DOCID, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки = ФайлСоздать( ИмяФайла, 0 );/##CHR(13)##//##CHR(10)##/ IF ( ФайлВыгрузки 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORSTRING = "Не удалось создать файл для выгрузки данных " + ИмяФайла;/##CHR(13)##//##CHR(10)##/ _SCANCODE_ERRORCODE = -1;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "Списоктоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если в документе указаны свои штриховые коды, то выгружем их/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT barcode, kolp /##CHR(13)##//##CHR(10)##/ FROM barcodes /##CHR(13)##//##CHR(10)##/ WHERE code = ''" + _DOCCODE + "'' AND ic = " + _DOCID + " AND spec_ic = " + СписокТоваров.identity_column, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСтрок( "СписокШтриховыхКодов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокШтриховыхКодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокШтриховыхКодов.barcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + Разделитель + ALLTRIM( STRTRAN( СписокТоваров.name, ",", "" ) ) + Разделитель + STR( СписокТоваров.cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ //ФайлЗаписатьСтроку( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + "," + STR( СписокТоваров.cena, 10, 2 ) + "," + STR( СписокШтриховыхКодов.kolp, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтриховойКод = ЗАПРОС( "SELECT MIN( bc ) FROM sprnnbc WHERE nn = ''" + СписокТоваров.nn + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT MIN( barcode ) FROM sprres_ed WHERE code= ''" + СписокТоваров.nn + "'' ");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтриховойКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки, ALLTRIM( СписокШтриховыхКодов.barcode ) + Разделитель + ALLTRIM( STRTRAN( СписокТоваров.name, ",", "" ) ) + Разделитель + STR( СписокТоваров.cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ //ФайлЗаписатьСтроку( ФайлВыгрузки, ALLTRIM( ШтриховойКод ) + "," + STR( СписокТоваров.cena, 10, 2 ) + "," + STR( СписокТоваров.kolp, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокШтриховыхКодов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлВыгрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для выполнения внешнего файла необходимо убрать комментарий у следующей строки и ввести выполняемую команду./##CHR(13)##//##CHR(10)##///Выполнить( "cmd", "/C d:\bat.bat d:\file1.txt d:\file2.txt", "", "", 3 );',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',17.00000000,'//Имя поля в форме ТСД/##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( ИНДЕКСПОЛЯ == 0, "docid", ЕСЛИ( ИНДЕКСПОЛЯ == 1, "ndok", ЕСЛИ( ИНДЕКСПОЛЯ == 2, "barcode", ЕСЛИ( ИНДЕКСПОЛЯ == 3, "cena", "kolp" ) ) ) );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( "Драйвер не предусматривает настройки свойств." );',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "ТСД SCANCODE";',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'11.09.2018 14:03:32') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','ТСД в формате SCANCODE','ТСД',0.00000000,'',0.00000000,33.00000000,0,'',0.00000000,'','',0,'4438699A-0AA9-4A68-A347-3CED07B89378',0,1,0,'11.09.2018 14:03:32') #begin #description Профиль ФР Атол v.3 (ФН) #name Профиль ФР Атол v.3 (ФН) #code 0000000098 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.DiscountTypeNumber = 0;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.0 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН)','ФР',0.00000000,'',0.00000000,153.00000000,0,'',0.00000000,'','',0,'9CC21BB1-DF07-4267-9C45-4F8874443209',0,1,0,'14.09.2018 14:51:05') #begin #description Профиль ФР Атол v.3 (ФН) (без прочих операций) #name Профиль ФР Атол v.3 (ФН) (без прочих операций) #code 0000000106 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = КомандыЧека.mode; //перенос строк/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.DiscountTypeNumber = 0;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.0 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 4 OR ТипЧека == 5 )/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), "5" );/##CHR(13)##//##CHR(10)##/ELSE IF ( ТипЧека == 0 OR ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2" , ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) );/##CHR(13)##//##CHR(10)##/ELSE ТипЧекаККМ = -1;/##CHR(13)##//##CHR(10)##/// Если Продажа/Возврат - то фискальные чеки/##CHR(13)##//##CHR(10)##/IF ( ТипЧекаККМ != -1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН) (без прочих операций)','ФР',0.00000000,'',0.00000000,170.00000000,0,'',0.00000000,'','',0,'BBE37877-CEF2-4147-8639-EC553A69052C',0,1,0,'14.09.2018 14:51:05') #begin #description Профиль ФР Атол v.3 (ФН) (С суммой скидки) #name Профиль ФР Атол v.3 (ФН) (С суммой скидки) #code 0000000129 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.DiscountTypeNumber = 0;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.0 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //вывод информации по скидкам/##CHR(13)##//##CHR(10)##/ IF (_СУММАСКИДКИ > 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Driver.Caption = ""; //для отступа/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ Driver.Caption = "Ваша выгода составила: "+STR(_СУММАСКИДКИ,10,2);/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН) (С суммой скидки)','ФР',0.00000000,'',0.00000000,4671.00000000,0,'',0.00000000,'','',0,'D50D65A4-D872-4F14-84A9-E2E087C8C87E',0,1,0,'14.09.2018 14:51:05') #begin #description Профиль ФР Атол v.3 (ФН) АЗС #name Профиль ФР Атол v.3 (ФН) АЗС #code 0000000102 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека != 0 AND ТипЧека != 1 )/##CHR(13)##//##CHR(10)##/ RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Артикул: " + STDF( Артикул ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаДляПечати, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + " " + STR( Количество, 16, 2 ) + " * " + STR( ЦенаПродажи, 16, 2 ) + "= " + STR( Количество * СУММАПРОДАЖИ, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 2 ) + " * " + STR( ЦенаПродажи, 16, 2 ) + " = " + STR( СУММАПРОДАЖИ, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаДляПечати, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать заголовка" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать подвал" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintFooter( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.DiscountTypeNumber = 0;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2" , ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать заголовка'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Оплата сертификатом #" + НОМЕРПОПОЛНЯЕМОГОСЕРТИФИКАТА+ "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 2, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГО " + STR( СуммаОплаты, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать подвал'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ // Для нефискальных чеков увеличиваем номер/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 2, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГО " + STR( СуммаОплаты, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать подвал'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ // Для нефискальных чеков увеличиваем номер/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН) АЗС','ФР',0.00000000,'',0.00000000,153.00000000,0,'',0.00000000,'','',0,'7BFE8CC0-7326-4569-A56B-D396FE65AE5C',0,1,0,'14.09.2018 14:51:06') #begin #description Профиль ФР Атол v.3 (ФН) с платежной системой АТОЛ #name Профиль ФР Атол v.3 (ФН) с платежной системой АТОЛ #code 0000000105 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции работы с ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьВозрастБуфераФН()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьСтатусСменыККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаДатаОкончанияСмены = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":" + RIGHT("00" + Driver.Second,2);/##CHR(13)##//##CHR(10)##/ ДатаОкончанияСмены = CTOD(СтрокаДатаОкончанияСмены,0); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = Driver.SessionExceedLimit;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24часа == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДатаТекущая = DATE();/##CHR(13)##//##CHR(10)##/ IF ( ДатаТекущая >= ДатаОкончанияСмены)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СменаПревысила24часа;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО ( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо указать ссылочный номер." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = CREATEOBJECT( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Вопрос = "Прервать печать всех слипов?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать слипов",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ //напечатаем шапку клише из ФР/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader(); //повторим команду печати заголовка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати клише " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //частичная отрезка слипа/##CHR(13)##//##CHR(10)##/ Driver.PartialCut( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.Name = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ Driver.Registration( );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Процентная скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.percents = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.PercentsDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая наценка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.SummCharge( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Суммовая скидка" AND ROUND( КомандыЧека.discountvalue, 2 ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( КомандыЧека.discountvalue, 2 ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.discountvalue, 2 );/##CHR(13)##//##CHR(10)##/ Driver.Destination = КомандыЧека.Destination;/##CHR(13)##//##CHR(10)##/ Driver.DiscountTypeNumber = 0;/##CHR(13)##//##CHR(10)##/ Driver.SummDiscount( ) ; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.0 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА;/##CHR(13)##//##CHR(10)##/PUBLIC DriverPayCard, ReferenceNumber, TerminalNumber, ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50;/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1;/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,4249.00000000,0,'',0.00000000,'','',0,'D023E6B1-C4E7-4105-AA12-7D325205AEE7',0,1,0,'14.09.2018 14:51:06') #begin #description Профиль ФР Атол v.3 (ФН, ФФД 1.05) #name Профиль ФР Атол v.3 (ФН, ФФД 1.05) #code 0000000123 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ // Driver.Registration( );/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ // Driver.Return( ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///идентификатор документа, из которого происходит печать чека передается через @ИДДокумента/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,4626.00000000,0,'',0.00000000,'','',0,'EFB15BC8-3019-45C4-9743-22C8587834C3',0,1,0,'14.09.2018 14:51:06') #begin #description Профиль ФР Атол v.3 (ФН, ФФД 1.05) (без прочих операций) #name Профиль ФР Атол v.3 (ФН, ФФД 1.05) (без прочих операций) #code 0000000124 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = КомандыЧека.mode; //перенос строк/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ // Driver.Registration( );/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ // Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PartialCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН, ФФД 1.05) (без прочих операций)','ФР',0.00000000,'',0.00000000,4627.00000000,0,'',0.00000000,'','',0,'9EA9C2E0-5EAB-43CE-8455-8D7D48D3063C',0,1,0,'14.09.2018 14:51:06') #begin #description Профиль ФР Атол v.3 (ФН, ФФД 1.05) АЗС #name Профиль ФР Атол v.3 (ФН, ФФД 1.05) АЗС #code 0000000125 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 0 OR ТипЧека == 1 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Артикул: " + STDF( Артикул ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаДляПечати, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + " " + STR( Количество, 16, 2 ) + " * " + STR( ЦенаПродажи, 16, 2 ) + "= " + STR( Количество * СУММАПРОДАЖИ, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 2 ) + " * " + STR( ЦенаПродажи, 16, 2 ) + " = " + STR( СУММАПРОДАЖИ, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаДляПечати, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека != 0 AND ТипЧека != 1 )/##CHR(13)##//##CHR(10)##/ RETURN ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.PartialCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 1 OR ТипЧека == 2 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГО " + STR( СуммаОплаты, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать подвал'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ // Для нефискальных чеков увеличиваем номер/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 1 OR ТипЧека == 2 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ ELSE IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГО " + STR( СуммаОплаты, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать подвал'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ // Для нефискальных чеков увеличиваем номер/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать заголовка" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать подвал" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintFooter( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ // Driver.Registration( );/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ // Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 1 OR ТипЧека == 2 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать заголовка'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Оплата сертификатом #" + НОМЕРПОПОЛНЯЕМОГОСЕРТИФИКАТА+ "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,1,0,'14.09.2018 14:51:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН, ФФД 1.05) АЗС','ФР',0.00000000,'',0.00000000,4628.00000000,0,'',0.00000000,'','',0,'96D7A3EA-284D-4923-A190-7C04A36221B8',0,1,0,'14.09.2018 14:51:06') #begin #description Профиль ФР Атол v.3 (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Атол v.3 (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000126 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА;/##CHR(13)##//##CHR(10)##/PUBLIC DriverPayCard, ReferenceNumber, TerminalNumber, ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50;/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1;/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции работы с ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьВозрастБуфераФН()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьСтатусСменыККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаДатаОкончанияСмены = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":" + RIGHT("00" + Driver.Second,2);/##CHR(13)##//##CHR(10)##/ ДатаОкончанияСмены = CTOD(СтрокаДатаОкончанияСмены,0); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = Driver.SessionExceedLimit;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24часа == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДатаТекущая = DATE();/##CHR(13)##//##CHR(10)##/ IF ( ДатаТекущая >= ДатаОкончанияСмены)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СменаПревысила24часа;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = CREATEOBJECT( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Вопрос = "Прервать печать всех слипов?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать слипов",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ //напечатаем шапку клише из ФР/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader(); //повторим команду печати заголовка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати клише " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //частичная отрезка слипа/##CHR(13)##//##CHR(10)##/ Driver.PartialCut( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.operation == "Регистрация" )/##CHR(13)##//##CHR(10)##/ // Driver.Registration( );/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ // Driver.Return( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##///ТипЧека = ЕСЛИ( ТипЧека == 1, ЕСЛИ( ЧЕККОРРЕКЦИИ, "8", "2" ), ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##///Исключил тип чека 8 (чек коррекции возврата прихода (такой вид чека недопустим по ФФД)/##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Кассир: " + _ИМЯКАССИРА + "'', 0, 0, 0 )" );*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/// 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/// 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##///06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##///05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##///06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##///04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС%/##CHR(13)##//##CHR(10)##/// 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/// 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( СуммаСкидки, 16, 2 ), "0" ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', /##CHR(13)##//##CHR(10)##/ " + STR( Количество, 16, 3 ) + ", " + STR( ЦенаСоСкидкой, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, 0, " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 0, " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 1, " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 2, " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 3, " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', 4, " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, " + STR( СуммаОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,0,0,'29.11.2018 9:45:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.3 (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,4629.00000000,0,'',0.00000000,'','',0,'639E3337-A640-4557-BF09-9E4555309A1D',0,1,0,'29.11.2018 9:45:23') #begin #description !Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.8 #name !Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.8 #code 0000000136 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.8.7/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC connector;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = "шт"; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаЦен.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/indexPrice=0;/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/IF (IndexPrice > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColSklad.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаКонтрагентов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColKontr = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColKontr.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColKontr.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.Upload(rowColKontr);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Цена", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'26.09.2018 13:27:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.8.8/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF (TYPE(Document) == "U")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("AlkoKod");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("AlkoPDF"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ""; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc="+STDF(ШтрихКод));/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'26.09.2018 13:27:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts Магазин15";',0,0,1,0,'26.09.2018 13:27:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'26.09.2018 13:27:54') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','!Профиль ТСД MobileSmarts Магазин 15 через COM v.1.8.8','ТСД',0.00000000,'',0.00000000,2784.00000000,0,'',0.00000000,'','',0,'1C022F1E-39B6-4EB5-8CA0-30FAB2F4ECAD',0,1,0,'12.10.2018 18:33:29') #begin #description !Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7 #name !Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7 #code 0000000137 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.7/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///PUBLIC connector;/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; // true - Выгрузка блоками по 500 товаров, false - обычная выгрузка. /##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##///отладка/##CHR(13)##//##CHR(10)##/РежимОтладки = false;/##CHR(13)##//##CHR(10)##///**ПЕРЕМЕННЫЕ, ОПРЕДЕЛЯЮЩИЕ РАСПОЛОЖЕНИЕ СЕРВЕРА MOBILESMARTS И ПОРТ ДОСТУПА К НЕМУ**/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1"; //по умолчанию предполагается, что сервер MobileSmarts установлен на том же ПК, с которого производится выгрузка из программы Айтида./##CHR(13)##//##CHR(10)##/Порт ="10501"; //значение по умолчанию для сервера mobileSmarts/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлуЛога = "C:\Users\Public\Documents"; /##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьКФайлуЛога + "\Журнал выгрузки " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуЛога,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЛога = ФАЙЛСОЗДАТЬ( ИмяФайлаЛога, 0 );/##CHR(13)##//##CHR(10)##/ Разделитель = ";";/##CHR(13)##//##CHR(10)##/ СтрокаЗаголовокЛога = "ЭтоАлкоголь"+Разделитель+"АлкоКодВ"+Разделитель+"КодТовара"+Разделитель+"Наименование"+Разделитель+"ШтрихКоды"+Разделитель+"Артикул"+Разделитель+"Цена"+/##CHR(13)##//##CHR(10)##/ Разделитель+"Остаток"+Разделитель+"АлкоКодВ"+Разделитель+"АлкоНаимВ"+Разделитель+"Объем"+Разделитель+"Крепость"+Разделитель+"Алкокод"+Разделитель+"Производитель"+/##CHR(13)##//##CHR(10)##/ Разделитель+"ПроизводительИмя"+Разделитель+"ПроизводительИНН"+Разделитель+"ПроизводительКПП";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЗаголовокЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаЗаголовокЛога = "";/##CHR(13)##//##CHR(10)##/ СтрокаЛога = "";/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Разделитель = ";"; /##CHR(13)##//##CHR(10)##/ СтрокаЛога = ЭтоАлкоголь+Разделитель+АлкоКодВ+Разделитель+КодТовара+Разделитель+Наименование+Разделитель+ШтрихКоды+Разделитель+Артикул+Разделитель+Цена+/##CHR(13)##//##CHR(10)##/ Разделитель+Остаток+Разделитель+АлкоКодВ+Разделитель+АлкоНаимВ+Разделитель+Объем+Разделитель+Крепость+Разделитель+Алкокод+Разделитель+Производитель+/##CHR(13)##//##CHR(10)##/ Разделитель+ПроизводительИмя+Разделитель+ПроизводительИНН+Разделитель+ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ //ФайлЛога = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога,0,1);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = "шт"; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ packing.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ packing.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ TRY/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ CATCH/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (РежимОтладки) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = "Не удалось записать строку с товаром в базу MobileSmarts";/##CHR(13)##//##CHR(10)##/ //ФайлЛога = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога,0,1);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЛога, СтрокаЛога);/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowCol = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowCol") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowCol.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = VAL(СписокСкладов.code);/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowCol.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowCol);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "007" OR СписокДокументов.code == "045" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = ЕСЛИ( СписокДокументов.code == "001", "Приход на склад", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "002", "Подбор заказа", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "007", "Инвентаризация",/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокДокументов.code == "045", "Инвентаризация", 0 ))));/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "Инвентаризация ЕГАИС";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок;/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1; //Склад //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента;//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ КонтрольКолва = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",КонтрольКолва); //Контроль количества по заявке./##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("price", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (РежимОтладки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлЛога );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'26.09.2018 13:28:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.7/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара, ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке;;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS;;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false; /##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/docType = ЕСЛИ( КОДДОКУМЕНТА == "001", "Приход на склад", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "002", "Подбор заказа", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "007", "Инвентаризация",/##CHR(13)##//##CHR(10)##/ ЕСЛИ( КОДДОКУМЕНТА == "045", "Инвентаризация", "" ))));/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF (TYPE(Document) == "U")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "#_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТА) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Document.CurrentItems.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ");/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ Цена = 0.00;//Элемент.GetField("price");/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc="+STDF(ШтрихКод));/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) AND ПУСТО(Цена))/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Наименование)) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'26.09.2018 13:28:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts ЕГАИС";',0,0,1,0,'26.09.2018 13:28:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'26.09.2018 13:28:09') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','!Профиль ТСД Mobile Smarts ЕГАИС через COM v.1.7','ТСД',0.00000000,'',0.00000000,2348.00000000,0,'',0.00000000,'','',0,'238C24AF-E34F-48C3-A58E-C80CF381F6F1',0,1,0,'26.09.2018 13:28:17') #begin #description Профиль ККМ АМС 100Ф #name Профиль ККМ АМС 100Ф #code 0000000138 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Полная выгрузка товаров в ККМ./##CHR(13)##//##CHR(10)##/СоздаватьИндекс = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаТоваров = "goods.dbf";/##CHR(13)##//##CHR(10)##/ ИмяФайлаТоваровПолное = ПутьКФайлу+ИмяФайлаТоваров;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаТоваров = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаТоваровПолное = ПутьКФайлу+ИмяФайлаТоваров;//path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПРОПИСНЫЕ(ИмяФайлаТоваров) <> "GOODS.DBF")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Имя файла выгрузки товаров должно быть ""goods.dbf""", "Выгрузка не произведена");/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлИндексаКодовИмя = ПутьКФайлу+"goodCODE.idx";/##CHR(13)##//##CHR(10)##/ФайлИндексаШтрихКодовИмя = ПутьКФайлу+"goodBARCODE.idx";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТаблицаТоваров = ТаблицаСоздать( ИмяФайлаТоваровПолное, ''BARCODE C(32), CODE I, NAME C(84), PRICE N(16, 2), SECTION_ I, REST N(10, 3), ALCOTYPE C(3), VOLUME N(10, 5), ALCO N(10, 5)'' );/##CHR(13)##//##CHR(10)##/IF (СоздаватьИндекс)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТаблицаИндексКодов = ТАБЛИЦАСОЗДАТЬИНДЕКС(ТаблицаТоваров, ''CODE'', ФайлИндексаКодовИмя);/##CHR(13)##//##CHR(10)##/ ТаблицаИндексШтрихКодов = ТАБЛИЦАСОЗДАТЬИНДЕКС(ТаблицаТоваров, ''BARCODE'', ФайлИндексаШтрихКодовИмя); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТАБЛИЦАПЕРЕЙТИВНАЧАЛО(ТаблицаТоваров);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выборка товаров/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + Товары, "СписокТоваров" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT maincode AS code, dbo.fn_getbarcodes( code ) AS barcode, name, dbo.fn_calcsklad_cena( code, '''', ''" + Склад + "'', ''001'' ) AS cena,/##CHR(13)##//##CHR(10)##/ (SELECT kkm_section FROM sprres_g WHERE code = sprres.group_ ) AS kkm_section/##CHR(13)##//##CHR(10)##/ FROM sprres", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТОВАРЫБЕЗЦЕНЫ OR cena > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BARCODES = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ CODE = VAL( code );/##CHR(13)##//##CHR(10)##/ NAME = ПЕРЕКОДИРОВАТЬ(LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 84 ),"ANSI","OEM");/##CHR(13)##//##CHR(10)##/ PRICE = ALLTRIM( STR( cena, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ SECTION_ = VAL(kkm_section);/##CHR(13)##//##CHR(10)##/ REST = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN cat = ''001'' THEN dbo.fn_fullnnname( code ) ELSE name END AS name, nnvid, d_litr, a_proc, ed/##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mNNVid = STR(VAL(ТоварИнфо.nnvid),3);/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 5 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 5 );/##CHR(13)##//##CHR(10)##/ ALCOTYPE = "";/##CHR(13)##//##CHR(10)##/ VOLUME = "";/##CHR(13)##//##CHR(10)##/ ALCO = "";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ALCOTYPE = mNNVid;/##CHR(13)##//##CHR(10)##/ VOLUME = mVolume;/##CHR(13)##//##CHR(10)##/ ALCO = mAProc;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ///##CHR(13)##//##CHR(10)##/ КоличествоШтрихКодов = 0;/##CHR(13)##//##CHR(10)##/ Разделитель = ",";/##CHR(13)##//##CHR(10)##/ ДлинаСтроки = LEN(BARCODES);/##CHR(13)##//##CHR(10)##/ НачальныйНомер = 1;/##CHR(13)##//##CHR(10)##/ КоличествоРазделителей = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества штрихкодов/##CHR(13)##//##CHR(10)##/ WHILE (НачальныйНомер <= ДлинаСтроки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (SUBSTR(BARCODES,НачальныйНомер,1) == Разделитель)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоРазделителей++; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НачальныйНомер++; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КоличествоШтрихКодов = КоличествоРазделителей + 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //занесем штрихкоды в массив/##CHR(13)##//##CHR(10)##/ IF (КоличествоШтрихКодов > 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Счетчик = 1;/##CHR(13)##//##CHR(10)##/ BARCODES = Разделитель + BARCODES;/##CHR(13)##//##CHR(10)##/ WHILE (Счетчик <= КоличествоШтрихКодов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассивШК[Счетчик] = ПОЛУЧИТЬСЛОВО(BARCODES,Разделитель,Счетчик);/##CHR(13)##//##CHR(10)##/ Счетчик++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ///##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоличествоШтрихКодов <= 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BARCODE = BARCODES;/##CHR(13)##//##CHR(10)##/ РезультатЗаписи = ТАБЛИЦАДОБАВИТЬЗАПИСЬ(ТаблицаТоваров, ''BARCODE,CODE,NAME,PRICE,SECTION_,ALCOTYPE,VOLUME,ALCO'');/##CHR(13)##//##CHR(10)##/ IF (!РезультатЗаписи) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось произвести запись в таблицу товаров!");/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СчетчикШК = 1;/##CHR(13)##//##CHR(10)##/ WHILE (СчетчикШК <= КоличествоШтрихКодов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BARCODE = МассивШК[СчетчикШК];/##CHR(13)##//##CHR(10)##/ РезультатЗаписи = ТАБЛИЦАДОБАВИТЬЗАПИСЬ(ТаблицаТоваров, ''BARCODE,CODE,NAME,PRICE,SECTION_,ALCOTYPE,VOLUME,ALCO'');/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!РезультатЗаписи) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось произвести запись в таблицу товаров!");/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СчетчикШК++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТАБЛИЦАЗАКРЫТЬ(ТаблицаТоваров);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ТАБЛИЦАОТКРЫТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/КодКассы = КодОборудования;/##CHR(13)##//##CHR(10)##/РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52" ) == "L" )/##CHR(13)##//##CHR(10)##/ РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = _РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle < 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''. Ошибка " + fileHandle ;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ТАБЛИЦАКОЛИЧЕСТВОЗАПИСЕЙ( fileHandle );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##/ПораВыходить = ТАБЛИЦАКОЛИЧЕСТВОЗАПИСЕЙ( fileHandle ) == 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТАБЛИЦАПЕРЕЙТИВНАЧАЛО( fileHandle );/##CHR(13)##//##CHR(10)##/WHILE ( !ПораВыходить )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) ИНДИКАТОР( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzDate = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "DATE_TIME" );/##CHR(13)##//##CHR(10)##/ tranzTime = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "DATE_TIME" );/##CHR(13)##//##CHR(10)##/ tranzType = STR( ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "TYPE_CHECK" ) );/##CHR(13)##//##CHR(10)##/ POSNumber = 0;/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "NCHECK" ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "CASHIER" ) );/##CHR(13)##//##CHR(10)##/ wareCode = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "CODE" );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "PRICE" );/##CHR(13)##//##CHR(10)##/ Quantity = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "AMOUNT" );/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = STR( ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "NCLOSE" ) );/##CHR(13)##//##CHR(10)##/ PriceWD = ( Quantity * Price - ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "DISSUM" ) ) / Quantity;/##CHR(13)##//##CHR(10)##/ SummWD = PriceWD * Quantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "EXCISE" );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "BARCODE" ) );/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = ecrSession + "/" + ecrSession;/##CHR(13)##//##CHR(10)##/ karta = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "CARD" );/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ СтрокаВЧеке = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "NBUY" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = ( ecrSession % 10 ) * 100000000 + VAL( chequeNumber % 100 ) * 1000000 + VAL( tranzType % 1000 ) * 1000 + СтрокаВЧеке % 1000;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаНал = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "CashSum" );/##CHR(13)##//##CHR(10)##/ СуммаБНал = ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "ElSum" ) + ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "AvSum" ) + ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "CredSum" ) + ТАБЛИЦАЗНАЧЕНИЕПОЛЯ( fileHandle, "ConsSum" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate );/##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( tranzCount ) + " AND date = ''" + TTOC( date ) +"'') /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПораВыходить = ТАБЛИЦАКОНЕЦФАЙЛА( fileHandle );/##CHR(13)##//##CHR(10)##/ ТАБЛИЦАПРОПУСТИТЬ( fileHandle, 1 );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПораВыходить = ТАБЛИЦАКОНЕЦФАЙЛА( fileHandle );/##CHR(13)##//##CHR(10)##/ ТАБЛИЦАПРОПУСТИТЬ( fileHandle, 1 );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "200" AND ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "101" )/##CHR(13)##//##CHR(10)##/ Summa = СуммаНал + СуммаБНал;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "101" AND СуммаБНал != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( СуммаБНал, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 0, 1 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ // ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "0" OR tranzType == "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ nnname = "Свободная продажа";/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequetype = "1";/##CHR(13)##//##CHR(10)##/ kolp = -kolp;/##CHR(13)##//##CHR(10)##/ summasale = -summasale;/##CHR(13)##//##CHR(10)##/ summabn = -summabn;/##CHR(13)##//##CHR(10)##/ summa = -summa;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ТАБЛИЦАЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, equipment )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', ''" + КодКассы + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПораВыходить = ТАБЛИЦАКОНЕЦФАЙЛА( fileHandle );/##CHR(13)##//##CHR(10)##/ ТАБЛИЦАПРОПУСТИТЬ( fileHandle, 1 );/##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ТАБЛИЦАЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"/##CHR(13)##//##CHR(10)##/RETURN "";',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,0,0,'26.12.2018 16:41:16') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ККМ АМС 100Ф','ККМ',0.00000000,'',0.00000000,4672.00000000,0,'',0.00000000,'','',0,'DB97072E-2C7D-47AA-9708-7146A524BF81',0,1,0,'26.12.2018 16:41:16') #begin #description !Профиль ТСД MobileSmarts Магазин 15 через COM v.1.9.0 #name !Профиль ТСД MobileSmarts Магазин 15 через COM v.1.9.0 #code 0000000145 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.9.0/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC connector;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаЦен.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/indexPrice=0;/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/IF (IndexPrice > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColSklad.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаКонтрагентов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColKontr = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColKontr.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColKontr.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.Upload(rowColKontr);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer, bc.barcode AS alkomark/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ LEFT JOIN barcodes bc ON bc.ic = " + ИДДок + " AND bc.spec_ic = " + СписокДокументов.ic + "/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Алкомарка = Спецификация.alkomark;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Цена", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'27.12.2018 11:16:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.9.0/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ""; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) = "L") АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) = "L") АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'27.12.2018 11:16:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts Магазин15";',0,0,1,0,'27.12.2018 11:16:37') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'27.12.2018 11:16:37') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','!Профиль ТСД MobileSmarts Магазин 15 через COM v.1.9.0','ТСД',0.00000000,'',0.00000000,5915.00000000,0,'',0.00000000,'','',0,'59B8A48F-EF3F-4389-B101-C84622A18FB9',0,1,0,'27.12.2018 11:16:43') #begin #description Обмен данными между Айтида и Эвотор v.3.7.7 #name Обмен данными между Айтида и Эвотор v.3.7.7 #code 0000000146 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = _ЭВОТОР_ПИВОКАКТОВАР;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = ВЫЧИСЛИТЬ("_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = _ЭВОТОР_ВСКРЫТИЕТАРЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ") == "U" )/##CHR(13)##//##CHR(10)##/_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##///ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "evotor_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = HTTPGET(Соединение, АдресРесурса, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ALLTRIM(ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')"));/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных. Проверьте соответсвие магазина в Эвотор и склада в карточке торгового оборудования";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ""; // передаем пустое тело в запросе для очистки всех товаров/##CHR(13)##//##CHR(10)##/ IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products/delete";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF (( Ответ1 <> 200 ) AND (Ответ1<>""))/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/// _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось отправить запрос на удаление всех товаров в облако Эвотор.";/##CHR(13)##//##CHR(10)##/// //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/// //RETURN false;/##CHR(13)##//##CHR(10)##/// } /##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", "");/##CHR(13)##//##CHR(10)##/ RETURN STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( STRTRAN( ТЕКСТ, "<", "<" ), ">", ">" ), ",", "."), ";","."), CHR(13),""), CHR(10),""), CHR(13)+CHR(10),""), CHR(34),""),CHR(187),""),CHR(171),""), """", ""), "/", " "), "\", " ");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = КОЛИЧЕСТВОСТРОК("СписокПапок");/##CHR(13)##//##CHR(10)##/н=0;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ н++;/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ic + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ //code = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) ); //код/##CHR(13)##//##CHR(10)##/ //barCodes[0] = ""; //массив штрихкодов/##CHR(13)##//##CHR(10)##/ //alcoCodes[0] = ""; //массив алкокодов/##CHR(13)##//##CHR(10)##/ _name = LEFT( XMLTRANS( ALLTRIM( name )), 100); //наименование/##CHR(13)##//##CHR(10)##/ //price = 0; //цена продажи/##CHR(13)##//##CHR(10)##/ //quantity = 0; //остаток/##CHR(13)##//##CHR(10)##/ //costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ //measureName = ""; //наименование единицы/##CHR(13)##//##CHR(10)##/ //tax = "NO_VAT"; //ставка налога/##CHR(13)##//##CHR(10)##/ allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/ //description = ""; //описание товара/##CHR(13)##//##CHR(10)##/ //articleNumber = ""; //артикул/##CHR(13)##//##CHR(10)##/ hasVariants = "false";/##CHR(13)##//##CHR(10)##/ parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/ group = "true"; //является группой/##CHR(13)##//##CHR(10)##/ //_type = "NORMAL"; //тип товара/##CHR(13)##//##CHR(10)##/ //alcoholByVolume = 0; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ //alcoholProductKindCode = 0; //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ //tareVolume = 0; //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",code,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",_name,",",true); /##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,Разделитель,true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"hasVariants",hasVariants,",",false);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,"",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ IF (н <= КоличествоЭлементов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (RIGHT(СтрокаТоваров,1) <> ",")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'н=0; /##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(code) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "VAT_10"; //НДС 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "VAT_18"; //НДС 18%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "VAT_0"; //НДС 0%/##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(34),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", " "); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", " ");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/GENERATEUUID = false;/##CHR(13)##//##CHR(10)##/IF (f_razr == 1 AND (aspecttype == 2 OR aspecttype == 0))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres == 0 AND f_hchild == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ GENERATEUUID = true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##///СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/н++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprnn WHERE nn = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')");/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT guid FROM evotorrelations WHERE maincode = ''" + code + "''");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!GENERATEUUID)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO evotorrelations (maincode, guid)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + code + "'', ''" + uuid + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code ); //код/##CHR(13)##//##CHR(10)##/barCodes[0] = ALLTRIM( barcode ); //массив штрихкодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN d_litr <> 0 THEN STR( d_litr, 10, 3 ) + '' '' + edd_litr /##CHR(13)##//##CHR(10)##/ WHEN weight <> 0 THEN STR( weight, 10, 3 ) + '' '' + ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight, ed, nnvid, d_litr, a_proc, dbo.fn_getalcocodes(nn) as alcocodes/##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ WHERE maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = XMLTRANS(ALLTRIM( name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) ));/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = XMLTRANS(ALLTRIM( cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( ТоварИнфо.volweight ) ));/##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/IF (_ВСКРЫТИЕТАРЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = ТоварИнфо.d_litr;/##CHR(13)##//##CHR(10)##/mAProc = ТоварИнфо.a_proc;/##CHR(13)##//##CHR(10)##/alcoCodes[0] = alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ПИВОКАКТОВАР AND ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ mNNVid = "";/##CHR(13)##//##CHR(10)##/ mAProc = "";/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/price = ALLTRIM( STR( cena, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/quantity = ALLTRIM( STR( kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/measureName = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = mEdn; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = "шт";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fractqty)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ measureName = "кг"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( kodn )], "NO_VAT"); //налоги/##CHR(13)##//##CHR(10)##/allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/description = mCname; //описание товара/##CHR(13)##//##CHR(10)##/articleNumber = XMLTRANS ( ALLTRIM(article) ); //артикул/##CHR(13)##//##CHR(10)##/parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/group = "false"; //является ли группой/##CHR(13)##//##CHR(10)##/_type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL_NOT_MARKED", ЕСЛИ(mAlco,"ALCOHOL_MARKED","NORMAL")); //тип товара/##CHR(13)##//##CHR(10)##/alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/IF (н > 1) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##///тэги/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",mCode,",",true);/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(alcoCodes[0]) AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",mName,",",true); /##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/IF (mAlco AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##///IF (н < КоличествоЭлементов)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##/IF (РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT guid FROM EvotorRelations WHERE maincode=''"+STDF(mCode)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(_ТоварУИД))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO EvotorRelations (maincode, guid) VALUES (''"+STDF(code)+"'',''"+STDF(_ТоварУИД)+"'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{";/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",_ТоварУИД,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",STR( VAL( mCode ) + 90000000 ),",",true);/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(barCodes[0]) AND _ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",name,",",true); /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName","шт",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell","false",",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description","для вскрытия тары",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type","ALCOHOL_MARKED","",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = _ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = ВЫЧИСЛИТЬ("_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = _ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = ВЫЧИСЛИТЬ("_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_in))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "evotor_in_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу+ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_in, RAT(path_in, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT(path_in, LEN(path_in)-RAT(path_in,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##///запрос списка магазинов/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///запрос списка устройств/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/devices/search";/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS name, '''' AS storeUuid SET FMTONLY OFF","СписокТерминалов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокТерминалов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДТЕРМИНАЛА = СписокТерминалов.uuid;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕТЕРМИНАЛА = ALLTRIM(СписокТерминалов.name);/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНАТЕРМИНАЛА = СписокТерминалов.storeUuid;/##CHR(13)##//##CHR(10)##/ IF ((УИДМАГАЗИНАТЕРМИНАЛА == УИДМАГАЗИНА) AND (ИМЯОБОРУДОВАНИЯ == НАЗВАНИЕТЕРМИНАЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДТЕРМИНАЛА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить терминал для получения данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF (ПЕРИОДЗАГРУЗКИ == 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( КОНЕЦПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( КОНЕЦПЕРИОДА, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "";/##CHR(13)##//##CHR(10)##/ device = "?&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период"" или ""Все продажи, хранящиеся в ККМ""");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ELSE/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/ //RETURN true;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Загрузка прервана.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[0] = "SELL";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[1] = "PAYBACK";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[4] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[5] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[6] = "WRITE_OFF";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[8] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[9] = "FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[10] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[14] = "ACCEPT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[15] = "RETURN";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[16] = "INVENTORY";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[17] = "REVALUATION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[18] = "OPEN_TARE";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[11] = "REGISTER_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[14] = "POSITION_TAX";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[15] = "DISCOUNT_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[35] = "DISCOUNT_DOCUMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[40] = "PAYMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[42] = "DOCUMENT_OPEN";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[45] = "DOCUMENT_CLOSE_FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[50] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[51] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[55] = "DOCUMENT_CLOSE";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[60] = "FPRINT_X_REPORT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[61] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[62] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[63] = "FPRINT_Z_REPORT";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[1] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[4] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[5] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[6] = "003";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[8] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[9] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[10] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[14] = "001";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[15] = "055";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[16] = "007";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[17] = "005";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[18] = "046";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[19] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[20] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[0] = "CASH";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[1] = "CARD";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##///MESSAGEBOX( Ответ );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/IF ( ФайлЗагрузки == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл загрузки ''" + ALLTRIM( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ(ФайлЗагрузки, JSONстрока);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 20 ) AS doctype, SPACE( 30 ) AS saletype, '''' AS docuuid, '''' AS deviceid, '''' AS type, '''' AS commodityName, CONVERT( datetime, '''' ) AS creationDate,'''' AS id, '''' AS userCode, '''' AS userUuid,/##CHR(13)##//##CHR(10)##/CONVERT(datetime, '''') AS closeDate, CONVERT(datetime, '''') AS openDate, '''' AS timezone, '''' AS openUserCode, '''' AS openUserUuid, '''' AS closeUserCode,/##CHR(13)##//##CHR(10)##/'''' AS closeUserUuid, '''' AS sessionUUID, '''' AS sessionNumber, '''' AS number, '''' AS closeResultSum, '''' AS closeSum, '''' AS sum, '''' AS storeUuid, '''' AS completeInventory,/##CHR(13)##//##CHR(10)##/'''' AS version, '''' AS baseDocumentNumber, '''' AS baseDocumentUUID, '''' AS clientName, '''' AS clientPhone, '''' AS couponNumber,/##CHR(13)##//##CHR(10)##/'''' AS alcoholByVolume, '''' AS alcoholProductKindCode, '''' AS balanceQuantity, '''' AS barcode, '''' AS commodityCode, '''' AS commodityUuid, '''' AS commodityType, /##CHR(13)##//##CHR(10)##/'''' AS costPrice, '''' AS fprintSection, '''' AS mark, '''' AS measureName,'''' AS tareVolume,'''' AS price, '''' AS quantity, '''' AS resultPrice,/##CHR(13)##//##CHR(10)##/'''' AS resultSum, '''' AS resultTaxSum, '''' AS tax, '''' AS taxPercent, '''' AS taxRateCode, '''' AS taxSum, '''' AS paymentType, '''' AS rrn, '''' AS documentNumber,/##CHR(13)##//##CHR(10)##/'''' AS receiptNumber, '''' AS proceeds,'''' AS cash,'''' AS collection, '''' AS cashIn,'''' AS cashOut, '''' AS total, '''' AS cashInQuantity, '''' AS cashOutQuantity,/##CHR(13)##//##CHR(10)##/'''' AS revenue, '''' AS sessionSalesResults, '''' AS sessionPurchasesResults, '''' AS nonzeroSumSales, '''' AS nonzeroSumPurchases, '''' AS quantitySalesQuantity,/##CHR(13)##//##CHR(10)##/'''' AS quantitySalesReversal,'''' AS quantitySalesBack, '''' AS reversalBack, '''' AS zreportNumber; SET FMTONLY OFF", "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаИнициализации = "commodityName=''''; ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DocumentTypes = "''SELL'' , ''PAYBACK'' , ''CASH_INCOME'' , ''CASH_OUTCOME'' , ''OPEN_SESSION'' , ''FPRINT'' , ''CLOSE_SESSION'' , ''INVENTORY'' , ''ACCEPT'' , ''RETURN'' , ''WRITE_OFF'' , ''REVALUATION'' , ''OPEN_TARE''";/##CHR(13)##//##CHR(10)##/TransactionTypes = "''DISCOUNT_DOCUMENT'' , ''DISCOUNT_POSITION'' , ''DISCOUNT_DOCUMENT_POSITION'' , ''DOCUMENT_OPEN'' , ''DOCUMENT_CLOSE'' , ''DOCUMENT_CLOSE_FPRINT'' , ''REGISTER_POSITION'' , ''REGISTER_BILLS'' ,/##CHR(13)##//##CHR(10)##/''CASH_INCOME'' , ''CASH_OUTCOME'' , ''INVENTORY'' , ''PAYMENT'' , ''OPEN_SESSION'' , ''CLOSE_SESSION'' , ''FPRINT_OPEN_SESSION'' , ''FPRINT_X_REPORT'' , ''FPRINT_Z_REPORT'' , ''POSITION_TAX'' , ''REVALUATION''";/##CHR(13)##//##CHR(10)##/doctype = "";/##CHR(13)##//##CHR(10)##/saletype = "";/##CHR(13)##//##CHR(10)##/docuuid = "";/##CHR(13)##//##CHR(10)##/Скрипт = "IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + DocumentTypes + " ) ) /##CHR(13)##//##CHR(10)##/ doctype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + TransactionTypes + " ) ) /##CHR(13)##//##CHR(10)##/ saletype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''uuid'' AND ЗначениеПоля <> ''null'' )/##CHR(13)##//##CHR(10)##/ docuuid = ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ ЗначениеПоля";/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad; /##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокФР" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КоличествоСтрок( "Магазины" );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##/IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции = VAL(ЗАПРОС("SELECT lasttranscount FROM sprequipment WHERE code = ''" + КодОборудования + "''"));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Магазины");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Магазины" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбщаяСумма = 0;/##CHR(13)##//##CHR(10)##/ Наличность = 0;/##CHR(13)##//##CHR(10)##/ СуммаСмены = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = 0;/##CHR(13)##//##CHR(10)##/ Инкассация = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docuuid = Магазины.docuuid;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если документ пустой - пропускаем /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docuuid ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции++;/##CHR(13)##//##CHR(10)##/ tranzCount = НомерПоследнейТранзакции; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doctype = Магазины.doctype;/##CHR(13)##//##CHR(10)##/ saletype = Магазины.saletype;/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ tranzType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 63)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСВИЕТРАНЗАКЦИЙ[i] == saletype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = STR(i); //saletype/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = Магазины.creationDate;/##CHR(13)##//##CHR(10)##/ ВременнаяЗона = VAL(Магазины.timezone);/##CHR(13)##//##CHR(10)##/ IF (!_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = ЗАПРОС("SELECT DATEADD(millisecond," + ВременнаяЗона + ", ''" + TTOC(ДАТАДОКУМЕНТА) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ tranzDate = LEFT(TTOC( ДАТАДОКУМЕНТА, 4),10);/##CHR(13)##//##CHR(10)##/ tranzTime = ALLTRIM(TTOC( ДАТАДОКУМЕНТА, 8));/##CHR(13)##//##CHR(10)##/ POSNumber = 1;//Магазины.deviceid;/##CHR(13)##//##CHR(10)##/ chequeNumber = Если(Магазины.receiptNumber=="",0,Магазины.receiptNumber);/##CHR(13)##//##CHR(10)##/ Seller = 0;//GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ wareCode_org = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ paymentType = Магазины.paymentType;/##CHR(13)##//##CHR(10)##/ paymentTypeInt = ЕСЛИ(paymentType=="",0,ЕСЛИ(СООТВЕТСВИЕОПЛАТ[0]==paymentType,0,1));/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = Магазины.price;/##CHR(13)##//##CHR(10)##/ Quantity = Магазины.quantity;/##CHR(13)##//##CHR(10)##/ Наличность = Магазины.cash;/##CHR(13)##//##CHR(10)##/ Инкассация = Магазины.collection;/##CHR(13)##//##CHR(10)##/ СуммаОтчет = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = Магазины.revenue;/##CHR(13)##//##CHR(10)##/ СуммаСмены = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = Магазины.closeSum;/##CHR(13)##//##CHR(10)##/ zReportNumber = Если(Магазины.zReportNumber=="",0,VAL(Магазины.zReportNumber));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 18)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСТВИЕОПЕРАЦИЙ[i] == doctype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequeType = STR(i); //doctype/##CHR(13)##//##CHR(10)##/ dockIndCode = СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[i];/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ecrSession = Магазины.sessionNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Магазины.resultPrice;/##CHR(13)##//##CHR(10)##/ SummWD = Магазины.resultSum;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = Магазины.mark;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ЕСЛИ(Магазины.barcode==''null'' OR Магазины.barcode=="","",Магазины.barcode));/##CHR(13)##//##CHR(10)##/ Summ = Магазины.sum;/##CHR(13)##//##CHR(10)##/ currency = 0;/##CHR(13)##//##CHR(10)##/ education = 0;/##CHR(13)##//##CHR(10)##/ commentCode = 0;/##CHR(13)##//##CHR(10)##/ universalNDOK = Магазины.documentNumber;/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (tranztype == "40" AND paymentTypeInt == 0 AND VAL(Summ) < 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "61" AND sessionclosecount < 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sessionclosecount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "63" AND (zReportNumber == 0))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(chequeNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequeNumber = " + chequeNumber + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(universalNDOK))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ndok = ''" + universalNDOK + "'' WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ecrSession))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ecrSession = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ksnum = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF (tranzType == "61")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаСмены);/##CHR(13)##//##CHR(10)##/ kolp = 0;/##CHR(13)##//##CHR(10)##/ summa = VAL(СуммаСмены);/##CHR(13)##//##CHR(10)##/ summasale = VAL(СуммаСмены); /##CHR(13)##//##CHR(10)##/ sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranzType == "63")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ //chequeNumber = zReportNumber;/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаОтчет);/##CHR(13)##//##CHR(10)##/ kolp = VAL(Наличность);/##CHR(13)##//##CHR(10)##/ summa = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ summasale = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND paymentTypeInt == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", "008" )))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name AS name, s.ed AS ed, s.kodn AS ТОВАРИНФО, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, СКЛАДЫИЗГРУПП.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "046" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype = " + tranzType);/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber + " AND transtype = " + tranzType );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины")/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'СтрокаТоваров = СтрокаТоваров + "]"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "]");/##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "Content-Encoding:gzip";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Заголовки[] = "Content-Length:"+ФАЙЛРАЗМЕР(ДескрипторФайла);/##CHR(13)##//##CHR(10)##///Заголовки[] = "Accept: application/json";/##CHR(13)##//##CHR(10)##///Заголовки[] = "Charset:UTF-8";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Соединение = HTTPСоединить( "https://api.evotor.ru" );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в облако Эвотор");/##CHR(13)##//##CHR(10)##/IF (_ЭВОТОР_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с облаком Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в облако Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/Соединение = false;/##CHR(13)##//##CHR(10)##/IF (_ЭВОТОР_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS code, '''' AS reason, '''' AS subject, '''' AS value SET FMTONLY OFF","Ошибки");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("Ошибки","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("Ошибки" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##/СтрокаОшибок = "";/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Ошибки" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ALLTRIM(Ошибки.code);/##CHR(13)##//##CHR(10)##/ ПричинаОшибки = ALLTRIM(Ошибки.reason);/##CHR(13)##//##CHR(10)##/ ОбъектОшибки = ALLTRIM(Ошибки.subject);/##CHR(13)##//##CHR(10)##/ ЗначениеОшибка = ALLTRIM(Ошибки.value);/##CHR(13)##//##CHR(10)##/ СтрокаОшибок = СтрокаОшибок + " Код ошибки: " + КодОшибки + ". Причина ошибки: " + ПричинаОшибки + ". Объект ошибки: " + ОбъектОшибки + ". Недопустимое значение: " + ЗначениеОшибка; /##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(Ответ1))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( Ответ1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаОшибок))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( СтрокаОшибок );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'30.12.2018 12:43:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными между Айтида и Эвотор v.3.7.7','ККМ',0.00000000,'',0.00000000,5768.00000000,0,'',0.00000000,'','',0,'B5BD8B0C-C13E-4EAA-83F8-CE7241142232',0,1,0,'30.12.2018 13:11:00') #begin #description Обмен данными с кабинетом Дримкас V.3 #name Обмен данными с кабинетом Дримкас V.3 #code 0000000147 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##///_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Полная выгрузка товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "<", "<" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ">", ">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ",", "." );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ";", "." );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, """", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "/", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "\", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(34),"" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(39),"" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(44),"" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "dreamkas_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляУдаления = "dreamkas_delete_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ФайлУдаления = ПутьКФайлу+ИмяФайлаДляУдаления;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = -1;/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления != -1 ) ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = ФайлСоздать( ФайлУдаления );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ФайлУдаления ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "[";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТоваровНовые = 0;/##CHR(13)##//##CHR(10)##/КоличествоТоваровУдаляемые = 0;/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(code) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "NDS_10"; //НДС 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "NDS_18"; //НДС 18%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "NDS_0"; //НДС 0%/##CHR(13)##//##CHR(10)##///СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##/СписокВесовыхЕдиниц = "кг,г,т";/##CHR(13)##//##CHR(10)##/СписокДробныхЕдиниц = "кг,г,т,дкл,л,мл";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT temp.code, temp.barcode, temp.name, temp.cname, temp.cena, temp.kolp, temp.kodn, temp.article,/##CHR(13)##//##CHR(10)##/ CASE WHEN spr.d_litr <> 0 THEN STR( spr.d_litr, 10, 3 ) + '' '' + spr.edd_litr /##CHR(13)##//##CHR(10)##/ WHEN spr.weight <> 0 THEN STR( spr.weight, 10, 3 ) + '' '' + spr.ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight,/##CHR(13)##//##CHR(10)##/ spr.nnvid, spr.d_litr, spr.a_proc, dbo.fn_getalcocodes(spr.nn) as alcocodes, spr.ed AS ed, tree.uniqueid AS uniqueid/##CHR(13)##//##CHR(10)##/ FROM " + Товары + " temp /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn spr ON spr.maincode = temp.code/##CHR(13)##//##CHR(10)##/ INNER JOIN spectree tree ON tree.ic = spr.identity_column AND tree.objtype = ''SPR'' AND (tree.objcode = ''S02'' OR tree.objcode = ''S05'')","СписокТоваров");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) + "" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (!ТОВАРЫБЕЗЦЕНЫ AND VAL(СписокТоваров.cena) == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ uuid = СписокТоваров.uniqueid;/##CHR(13)##//##CHR(10)##/ //ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprnn WHERE nn = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ IF (uuid == "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ //запишем файлы если количество элементов равно 100/##CHR(13)##//##CHR(10)##/ //1. файл с удаляемыми товарами ???/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровУдаляемые == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "]";/##CHR(13)##//##CHR(10)##/ //запрос на удаление товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайлаУдаления, ПЕРЕКОДИРОВАТЬ(СтрокаТоваровУдаление, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайлаУдаления, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляУдаления = ФАЙЛПРОЧИТАТЬ( ДескрипторФайлаУдаления, "S", ФАЙЛРАЗМЕР( ДескрипторФайлаУдаления ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресКабинета = "https://kabinet.dreamkas.ru";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( АдресКабинета, 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"DELETE", АдресРесурса, ДанныеДляУдаления,"Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоТоваровУдаляемые = 0;/##CHR(13)##//##CHR(10)##/ //Создадим новую строку для товаров/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "[";/##CHR(13)##//##CHR(10)##/ // Если файл с товарами уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления != -1 ) ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = ФайлСоздать( ФайлУдаления );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ФайлУдаления ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //2. файл с добавляемыми товарами/##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровНовые == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "]"; //закрывающая квадратная скобка строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //запрос на создание товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в кабинет Дримкас");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"PATCH", АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ //ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ Соединение = false;/##CHR(13)##//##CHR(10)##/ КоличествоТоваровНовые = 0;/##CHR(13)##//##CHR(10)##/ //Создадим новую строку для товаров/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "[";/##CHR(13)##//##CHR(10)##/ // Если файл с товарами уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code ); //код/##CHR(13)##//##CHR(10)##/ barCodes[0] = ALLTRIM( СписокТоваров.barcode ); //массив штрихкодов/##CHR(13)##//##CHR(10)##/ mName = XMLTRANS( СписокТоваров.name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( СписокТоваров.volweight ) );/##CHR(13)##//##CHR(10)##/ // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/ mCname = XMLTRANS( СписокТоваров.cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( СписокТоваров.volweight ) );/##CHR(13)##//##CHR(10)##/ // Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.nnvid ) >= 500 OR ВСПИСКЕ( VAL( СписокТоваров.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = СписокТоваров.d_litr;/##CHR(13)##//##CHR(10)##/ mAProc = СписокТоваров.a_proc;/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = СписокТоваров.alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##/ mEdn = СписокТоваров.ed;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ price = ALLTRIM( STR( 100*СписокТоваров.cena, 8, 0 )); //цена продажи/##CHR(13)##//##CHR(10)##/ //mKolp = ALLTRIM( STR( СписокТоваров.kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/ costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _Scalable = false;/##CHR(13)##//##CHR(10)##/ _Fractional = false;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокВесовыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _Scalable = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДробныхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _Fractional = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не используем очистку ККМ/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоТоваровУдаляемые++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоТоваровНовые++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( СписокТоваров.kodn )], "NDS_NO_TAX"); //налоги/##CHR(13)##//##CHR(10)##/ articleNumber = XMLTRANS( СписокТоваров.article ); //артикул/##CHR(13)##//##CHR(10)##/ _type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL", ЕСЛИ(mAlco,"ALCOHOL",ЕСЛИ(_Scalable,"SCALABLE","COUNTABLE"))); //тип товара/##CHR(13)##//##CHR(10)##/ alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc*10, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume*1000, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ quantity = ЕСЛИ(_Fractional,1,1000);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровНовые > 1) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "{"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + ЗАПИСАТЬТЭГ(2,"id",uuid,"",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"id",uuid,",",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"name",mName,",",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"type",_type,",",true);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"departmentId",0,",",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"quantity",quantity,",",false);//мерность/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"meta","{","",false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"code",alcoCodes[0],"", true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"code",mCode,"", true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"typeCode",alcoholProductKindCode,"",true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (mEdn=="л")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tareVolume = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"volume",tareVolume,"",false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"alc",alcoholByVolume*10,"",false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "},";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"barcodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(articleNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"vendorCodes","["""+articleNumber+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ЗАПИСАТЬТЭГ(2,"tax",tax,"",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "}";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "]";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "]";/##CHR(13)##//##CHR(10)##/ //запрос на удаление товаров/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайлаУдаления, ПЕРЕКОДИРОВАТЬ(СтрокаТоваровУдаление, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайлаУдаления, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляУдаления = ФАЙЛПРОЧИТАТЬ( ДескрипторФайлаУдаления, "S", ФАЙЛРАЗМЕР( ДескрипторФайлаУдаления ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресКабинета = "https://kabinet.dreamkas.ru";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( АдресКабинета, 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"DELETE", АдресРесурса, ДанныеДляУдаления,"Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаТоваров) AND СтрокаТоваров <> "]")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //запрос на создание товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в кабинет Дримкас");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"PATCH", АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ //ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ Соединение = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ФайлЖурнала = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТРАНЗАКЦИЮ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ tranzCount = ИДТранзакции + 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция открытия чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + STR( VAL( seller ) ) + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + kkmsklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ ИДТранзакции++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///заглушка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( path_in ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "dreamkas_in_" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + ".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу + ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT( path_in, RAT( path_in, "\" ) );/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT( path_in, LEN( path_in ) - RAT( path_in, "\" ) );/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу + "http_log_" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + ".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ != 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "При загрузке данных из облака Дримкас доступен только вариант загрузки ""За период с"" и ""Все данные""." );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?from=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8 ) ) + ".239Z" + "&to=" + LEFT( TTOC( КОНЕЦПЕРИОДА, 7, "-" ), 10 ) + "T" + ALLTRIM( TTOC( КОНЕЦПЕРИОДА, 8 ) ) + ".239Z";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );//"f3b86356-9f12-4201-a373-9d4e8d137d9c";//"f3422466-bc15-4270-87b4-59706081699b";///##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[ 1 ] = "Authorization: Bearer " + Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/devices";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запрашиваем список устройств, для формрования запроса данных/##CHR(13)##//##CHR(10)##//*ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT 0 AS id SET FMTONLY OFF", "Устройства" );/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ( HTTPGET( Соединение, АдресРесурса, "Заголовки" ),"UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Устройства", "JSON", JSONстрока, "", "", "jsonroot" );/##CHR(13)##//##CHR(10)##/СписокУстройств = "";/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Устройства" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "Устройства" ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СписокУстройств += ЕСЛИ( ПУСТО( СписокУстройств ), "", "," ) + Устройства.id;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Устройства" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "Устройства" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТаблицаПервичныхДанных = "##" + УНИКАЛЬНОЕИМЯ( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ТаблицаПервичныхДанных + "( cheque varchar( max ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Стоп = false;/##CHR(13)##//##CHR(10)##/offset = 0;/##CHR(13)##//##CHR(10)##/WHILE ( !Стоп )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ АдресРесурса = "api/receipts" + period +"&offset=" + offset + "&limit=1000"; //&devices=" + СписокУстройств;//"api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( HTTPGET( Соединение, АдресРесурса, "Заголовки" ), "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗагрузки = ФАЙЛОТКРЫТЬ( ИмяФайлаЗагрузки, 1, 1 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ФайлЗагрузки, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЗагрузки, JSONстрока );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Чеки", json.data, "cheque" );/##CHR(13)##//##CHR(10)##/ // Переносим все первичные данные во временную таблицу/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ( ТаблицаПервичныхДанных, "", "", "Чеки" );/##CHR(13)##//##CHR(10)##/ Стоп = КОЛИЧЕСТВОСТРОК( "Чеки" ) < 1000;/##CHR(13)##//##CHR(10)##/ offset += КОЛИЧЕСТВОСТРОК( "Чеки" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Запросим информацию о закрытых сменах/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/shifts" + period;//+"&offset=;&limit=";/##CHR(13)##//##CHR(10)##/JSONСмены = ПЕРЕКОДИРОВАТЬ( HTTPGET( Соединение, АдресРесурса, "Заголовки" ), "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ( Соединение );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Чек записывается следующими транзакциями/##CHR(13)##//##CHR(10)##/// 42 - открытие чека/##CHR(13)##//##CHR(10)##/// 11 - продажа/##CHR(13)##//##CHR(10)##/// 43 - оплата/##CHR(13)##//##CHR(10)##/// 55 - закрытие чека/##CHR(13)##//##CHR(10)##/// Нет идентификатора транзакции, поэтому, нумеруем сами/##CHR(13)##//##CHR(10)##/ИДТранзакции = ЗАПРОС( "SELECT MAX( tranzcount ) FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT cheque FROM " + ТаблицаПервичныхДанных, "Данные" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка чеков", КОЛИЧЕСТВОСТРОК( "Данные" ) );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "Данные" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "Данные" ), "Обработано строк" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Чек", Данные.cheque );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Кассир", Чек.cashier );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ date = CTOD( Чек.localDate, 7 );/##CHR(13)##//##CHR(10)##/ tranzType = "42";/##CHR(13)##//##CHR(10)##/ posNumber = ЗНАЧЕНИЕПОЛЯ( "Чек", "shopId", 0 );/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ seller = STR( VAL( ЗАПРОС( "SELECT maincode FROM sprempl WHERE ex_code=''" + ЗНАЧЕНИЕПОЛЯ( "Кассир", "id", "" ) + "''" ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ chequeNumber = Чек.number;/##CHR(13)##//##CHR(10)##/ chequeType = ЕСЛИ( Чек.type == "REFUND", 1, 0 );/##CHR(13)##//##CHR(10)##/ ecrSession = Чек.shiftId;/##CHR(13)##//##CHR(10)##/ karta = Чек.id;/##CHR(13)##//##CHR(10)##/ ecrNumber = Чек.deviceId;/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ kolp = 0.00;/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ summasale = 0.00;/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ summa = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Запомним ид транзакции, для последующего обновления её полей/##CHR(13)##//##CHR(10)##/ tranzCount42 = tranzCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Позиции", Чек.positions, "Позиция" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Позиции" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "СтрокаЧека", Позиции.Позиция );/##CHR(13)##//##CHR(10)##/ nnname = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "name", "Свободная продажа" );/##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС( "SELECT maincode FROM sprres WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MAX( ic ) FROM spectree WHERE CONVERT(varchar( 50 ), uniqueid )= ''" + STDF( СтрокаЧека.id ) + "'')" );/##CHR(13)##//##CHR(10)##/ if ( !ПУСТО( nn ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm, s.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ warecode_org = ТОВАРИНФО.maincode;/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ kkmsklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/ firm = СПИСОКФР.firm;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ kolp = VAL( СтрокаЧека.quantity ) / 1000.00;/##CHR(13)##//##CHR(10)##/ price = VAL( СтрокаЧека.price ) / 100.00;/##CHR(13)##//##CHR(10)##/ summasale = kolp * price;/##CHR(13)##//##CHR(10)##/ discount = VAL( ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "discount", 0 ) ) / 100.00;/##CHR(13)##//##CHR(10)##/ summa = summasale + discount;/##CHR(13)##//##CHR(10)##/ cena = summa / ЕСЛИ( ROUND( kolp, 3 ) != 0, kolp, 1 );/##CHR(13)##//##CHR(10)##/ barcode = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "exciseBarcode", "" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( barcode ) )/##CHR(13)##//##CHR(10)##/ barcode = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "barcode", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Считаем общее количество по чеку (для 55-1 и 42-1 транзакций)/##CHR(13)##//##CHR(10)##/ totalQuantity += kolp;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Позиции" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Товар нашли/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Позиции" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СтрокаЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запишем оплаты/##CHR(13)##//##CHR(10)##/ tranzType = "43";/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ summasale = 0.00;/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Оплаты", Чек.payments, "Оплата" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Оплаты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Оплата", Оплаты.Оплата );/##CHR(13)##//##CHR(10)##/ kolp = VAL( Оплата.amount ) / 100.00;/##CHR(13)##//##CHR(10)##/ summa = kolp;/##CHR(13)##//##CHR(10)##/ AspectValue1 = ЕСЛИ( UPPER( ALLTRIM( ЗНАЧЕНИЕПОЛЯ( "Оплата", "type", "" ) ) ) == "CASHLESS", "2", "1" );/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ IF ( AspectValue1 == "2" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Оплаты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Оплаты" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Оплата" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция закрытия чека/##CHR(13)##//##CHR(10)##/ tranzType = "55";/##CHR(13)##//##CHR(10)##/ kolp = totalQuantity;/##CHR(13)##//##CHR(10)##/ summa = VAL( ЗНАЧЕНИЕПОЛЯ( "Чек", "amount", 0 ) ) / 100.00;/##CHR(13)##//##CHR(10)##/ summasale = summa;/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summa= ''" + STR( summa, 16, 2 ) + "'', summasale= ''" + STR( summa, 16, 2 ) + "'', kolp = ''" + STR( kolp, 16, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + tranzCount42 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "Данные" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/doccode = "";/##CHR(13)##//##CHR(10)##/seller = "";/##CHR(13)##//##CHR(10)##/wareMark = "";/##CHR(13)##//##CHR(10)##/chequeNumber = 0;/##CHR(13)##//##CHR(10)##/chequeType = 9;/##CHR(13)##//##CHR(10)##/universalNDOK = "";/##CHR(13)##//##CHR(10)##/nn = "";/##CHR(13)##//##CHR(10)##/s_code = "";/##CHR(13)##//##CHR(10)##/nnname = "";/##CHR(13)##//##CHR(10)##/ed = "";/##CHR(13)##//##CHR(10)##/kodn = "";/##CHR(13)##//##CHR(10)##/client = "";/##CHR(13)##//##CHR(10)##/kolp = 0.00;/##CHR(13)##//##CHR(10)##/barcode = "";/##CHR(13)##//##CHR(10)##/summasale = 0.00;/##CHR(13)##//##CHR(10)##/summabn = 0.00;/##CHR(13)##//##CHR(10)##/summa = 0.00;/##CHR(13)##//##CHR(10)##/cena = 0.00;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/manager = "";/##CHR(13)##//##CHR(10)##/warecode_org = "";/##CHR(13)##//##CHR(10)##/AspectValue1 = "";/##CHR(13)##//##CHR(10)##/totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь необходимо запросить информацию о закрытиях смен/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЗИТЬJSON( "Смены", JSONСмены, "Смена" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Смены" ) AND ТИП( "Смены.Смена" ) == "C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Смена", Смены.Смена );/##CHR(13)##//##CHR(10)##/ // Если смена закрыта/##CHR(13)##//##CHR(10)##/ IF ( UPPER( ALLTRIM( ЗНАЧЕНИЕПОЛЯ( "Смена", "isClosed", false ) ) ) == "TRUE" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( ЗНАЧЕНИЕПОЛЯ( "Смена", "closedAt", {} ), 7 );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzType = "63";/##CHR(13)##//##CHR(10)##/ posNumber = ЗНАЧЕНИЕПОЛЯ( "Смена", "shopId", 0 );/##CHR(13)##//##CHR(10)##/ ecrSession = Смена.shiftId;/##CHR(13)##//##CHR(10)##/ karta = Смена.id;/##CHR(13)##//##CHR(10)##/ ecrNumber = Смена.deviceId;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Смены" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Смены" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,1,0,'30.12.2018 23:46:39') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с кабинетом Дримкас V.3','ККМ',0.00000000,'',0.00000000,4730.00000000,0,'',0.00000000,'','',0,'F9C2B8D7-7A63-4B97-B215-0D0D433EB253',0,1,0,'30.12.2018 23:46:56') #begin #description Весы с ПЭ (МАССА-К ВПМ) с файлом Scales.txt #name Весы с ПЭ (МАССА-К ВПМ) с файлом Scales.txt #code 0000000148 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ФайлМассаК, МассаКИмяФайла;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##/ВЫПОЛНИТЬ( МассаКПутьКФАйлам + "ScalesCommunications.exe", "WRITE 101 " + МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN "МАССА-К ВМП";',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то сформируем файл с командой удаления всех товаров/##CHR(13)##//##CHR(10)##/МассаКПутьКФАйлам = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( ПРАВСИМВ( МассаКПутьКФАйлам, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ МассаКПутьКФАйлам += "\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ( МассаКПутьКФАйлам + "ScalesCommunications.exe", "ERASE 1 0", "", "open", 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем файл Scales.txt/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКПутьКФАйлам + "Scales.txt" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, ЗАПРОС( "SELECT ip_addr FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКИмяФайла = МассаКПутьКФАйлам + "products.csv";/##CHR(13)##//##CHR(10)##/// Создаем файл для записи в него выгружаемых товаров/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/Строка = "PLU;TYPE;LABEL_NUMBER;BARCODE_NUMBER;BARCODE_PREFIX;PRICE;TARE;CODE;BEST_BEFORE;SHELF_LIFE;CERTIFICATE;GROUP;CENTERING;NAME;CONTENT;INFO_TYPE;INFO";/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Убираем из наименования и примечания символы, которые не понимает программа МАССА-К/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ= ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( НАИМЕНОВАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ПРИМЕЧАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ DTOC( ДАТА( ) + СРОКГОДНОСТИ ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем строку в файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка ) ;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 15:27:49') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (МАССА-К ВПМ) с файлом Scales.txt','ВЕСЫ',0.00000000,'',0.00000000,314.00000000,0,'',0.00000000,'','',0,'6CBF73E4-98CC-4978-8812-5DCF06688A32',0,1,0,'23.01.2019 15:27:49') #begin #description Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров с файлом Scales.txt #name Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров с файлом Scales.txt #code 0000000149 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ФайлМассаК, МассаКИмяФайла;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',49.00000000,'/##CHR(13)##//##CHR(10)##///Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыводитьСообщения = ЗАПРОС( "SELECT f_messages FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ПРИЗНАКОЧИСТКИВЕСОВ = true;/##CHR(13)##//##CHR(10)##/КодГруппыВесов = ЗАПРОС( "SELECT MIN( code ) AS code FROM sprnnweights WHERE eq_code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/КатегорияЦены = ЗАПРОС( "SELECT clev FROM sprskl WHERE code = ( SELECT sklad FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'')" );/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE, ОШИБКАДРАЙВЕРА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то сформируем файл с командой удаления всех товаров/##CHR(13)##//##CHR(10)##/МассаКПутьКФАйлам = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( ПРАВСИМВ( МассаКПутьКФАйлам, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ МассаКПутьКФАйлам += "\";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ( МассаКПутьКФАйлам + "ScalesCommunications.exe", "ERASE 1 0", "", "open", 3 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем файл Scales.txt/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКПутьКФАйлам + "Scales.txt" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, ЗАПРОС( "SELECT ip_addr FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассаКИмяФайла = МассаКПутьКФАйлам + "products.csv";/##CHR(13)##//##CHR(10)##/// Создаем файл для записи в него выгружаемых товаров/##CHR(13)##//##CHR(10)##/ФайлМассаК = ФАЙЛСОЗДАТЬ( МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/Строка = "PLU;TYPE;LABEL_NUMBER;BARCODE_NUMBER;BARCODE_PREFIX;PRICE;TARE;CODE;BEST_BEFORE;SHELF_LIFE;CERTIFICATE;GROUP;CENTERING;NAME;CONTENT;INFO_TYPE;INFO";/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ Для расчета максимального срока годности по приходам надо заменить расчет СРОКГОДНОСТИ на такой/##CHR(13)##//##CHR(10)##/ (SELECT DATEDIFF( day, GETDATE( ), MAX( date_ex ) ) FROM spec001 WHERE nn= s.nn ) AS СРОКГОДНОСТИ,/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT w.code, w.nn, s.maincode AS КОД, s.note AS ПРИМЕЧАНИЕ, s.name AS НАИМЕНОВАНИЕ, w.plu AS ПЛУ, /##CHR(13)##//##CHR(10)##/ s.store_period AS СРОКГОДНОСТИ, /##CHR(13)##//##CHR(10)##/ CASE WHEN ( SELECT f_weight FROM spredn WHERE code= s.ed ) = 1 THEN 0 ELSE 1 END AS ВЕСОВОЙ, s.note,/##CHR(13)##//##CHR(10)##/ dbo.fn_calcclev_cena( s.nn, '''', ''" + КатегорияЦены + "'', ''001'') AS ЦЕНА/##CHR(13)##//##CHR(10)##/ FROM sprnnweights w /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn s /##CHR(13)##//##CHR(10)##/ ON w.nn = s.nn /##CHR(13)##//##CHR(10)##/ WHERE w.nn <> '''' AND w.code = ''" + КодГруппыВесов + "'' AND w.plu <> ''''/##CHR(13)##//##CHR(10)##/ ORDER BY w.code, s.name ", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/ IF ( EMPTY( ПЛУ ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Убираем из наименования и примечания символы, которые не понимает программа МАССА-К/##CHR(13)##//##CHR(10)##/ НАИМЕНОВАНИЕ= ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( НАИМЕНОВАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ПРИМЕЧАНИЕ = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ПРИМЕЧАНИЕ, "/", "" ), "\", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ Для выгрузки максимального срока годности по приходам надо заменить строку на такую/##CHR(13)##//##CHR(10)##/ Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СРОКГОДНОСТИ > 0, DTOC( ДАТА( ) + СРОКГОДНОСТИ ), "" ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;"; /##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/ Строка = ПЛУ + ";" + ВЕСОВОЙ + ";1;1;0;" + STR( ЦЕНА, 16, 2 ) + ";0;" + КОД + ";"+/##CHR(13)##//##CHR(10)##/ DTOC( ДАТА( ) + СРОКГОДНОСТИ ) + ";0;;0;0;" + НАИМЕНОВАНИЕ + ";" + ПРИМЕЧАНИЕ + ";0;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем строку в файл/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлМассаК, Строка ) ;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлМассаК );/##CHR(13)##//##CHR(10)##/ВЫПОЛНИТЬ( МассаКПутьКФАйлам + "ScalesCommunications.exe", "WRITE 1 " + МассаКИмяФайла );/##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN "МАССА-К ВМП";',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'23.01.2019 21:51:44') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (МАССА-К ВПМ) выгрузка всех товаров с файлом Scales.txt','ВЕСЫ',0.00000000,'',0.00000000,315.00000000,0,'',0.00000000,'','',0,'6407DFC9-06B4-46D4-9171-E46CB86DB5F9',0,1,0,'23.01.2019 21:51:44') #begin #description Обмен данными с ньюджерами АТОЛ через Excel #name Обмен данными с ньюджерами АТОЛ через Excel #code 0000000150 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФАЙЛНАЙТИ( СЖАТЬПРОБЕЛЫ( path_in ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/kkmfirm = firm;/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Open( ИмяФайла );/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Определяем размеры матрицы/##CHR(13)##//##CHR(10)##/rowCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].ROW;/##CHR(13)##//##CHR(10)##/columnCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].COLUMN;/##CHR(13)##//##CHR(10)##/curY = 2;/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Чтение файла с данными.", rowCount );/##CHR(13)##//##CHR(10)##/WHILE ( curY < rowCount )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( curY, "Прочитано " + curY + " из " + rowCount );/##CHR(13)##//##CHR(10)##/ curY++;/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzCount = cMSEDS.Cells[ 1, curY ].Value;/##CHR(13)##//##CHR(10)##/ tranzDate = ДАТА( );/##CHR(13)##//##CHR(10)##/ tranzTime = ДАТА( );/##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ POSNumber = "1";/##CHR(13)##//##CHR(10)##/ chequeNumber = "1";/##CHR(13)##//##CHR(10)##/ Seller = "0";/##CHR(13)##//##CHR(10)##/ wareCode = STR( INT( VAL( cMSEDS.Cells[ 2, curY ].Value ) ) );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = cMSEDS.Cells[ 5, curY ].Value;/##CHR(13)##//##CHR(10)##/ Quantity = cMSEDS.Cells[ 4, curY ].Value;/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = Price * Quantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ firm = kkmfirm;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = cMSEDS.Cells[ 3, curY ].Value;/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = cMSEDS.Cells[ 7, curY ].Value;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( ПУСТО( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ), kkmfirm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzCount ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.Close( false );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Полная выгрузка товаров в Excel./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,бут,набор,пэт,уп,дес,пара";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[1] = "шт";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[2] = "кг";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[3] = "л";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[4] = "дал";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[5] = "м";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[6] = "км";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[7] = "м2";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[8] = "м3";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[9] = "компл";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[10] = "упак";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[11] = "бут";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[12] = "набор";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[13] = "пэт";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[14] = "уп";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[15] = "дес";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕИДЕДИНИЦ[16] = "пара";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Add( );/##CHR(13)##//##CHR(10)##///MSExcel.Visible = true;/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Выводим строки заголовки/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 1, 1 ].Value = "Код товара";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 2, 1 ].Value = "Наименование товара";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 3, 1 ].Value = "Цена";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 4, 1 ].Value = "Ставка НДС";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 5, 1 ].Value = "Изменение цены";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 6, 1 ].Value = "Весовой товар";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 7, 1 ].Value = "Система налогообложения";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 8, 1 ].Value = "Способ предмета расчета";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 9, 1 ].Value = "Признак предмета расчета";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 10, 1 ].Value = "Штрихкод";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 11, 1 ].Value = "Секция";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 12, 1 ].Value = "ID единицы измерения";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 13, 1 ].Value = "Единица измерения";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 14, 1 ].Value = "ID поставщика";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 15, 1 ].Value = "Наименование поставщика";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 16, 1 ].Value = "ИНН поставщика";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 17, 1 ].Value = "Телефон поставщика";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекущаяСтрока = 2;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed AS sprres_ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, ISNULL( sprres_g.paytype, '''' ) AS paytype ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ТекстЗапроса = ТекстЗапроса + " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode/##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( ТекстЗапроса, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL (code) > 9999 OR VAL (code) == 0) //код позиции может быть в диапазоне от 1 до 9999/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ OR cena > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //код товара/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 1, ТекущаяСтрока ].Value = ALLTRIM( VAL(code) );/##CHR(13)##//##CHR(10)##/ //наименование товара (128 символов)/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 2, ТекущаяСтрока ].Value = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 128 ); //LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 128 ); /##CHR(13)##//##CHR(10)##/ //цена/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 3, ТекущаяСтрока ].Value = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //Ставка НДС/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 4, ТекущаяСтрока ].Value = ЕСЛИ( kodn == "04", 1, ЕСЛИ( kodn == "05", 6, ЕСЛИ( kodn == "01", 2, 6 ) ) );/##CHR(13)##//##CHR(10)##/ //изменнение цены: «0» – товар продается по цене, указанной в каталоге; «1» – кассир может изменить указанную цену товара при пробитии на ньюджере; «255» – товар удален или временно отключен./##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 5, ТекущаяСтрока ].Value = ЕСЛИ( min_cena < 0 , 1, 0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НаименованиеЕдиницы = "шт";/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц, sprres_ed) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеЕдиницы = sprres_ed; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //признак весового товара: «0» – штучный товар; «16» – весовой товар;/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 6, ТекущаяСтрока ].Value = ЕСЛИ(НаименованиеЕдиницы == "кг",16,0);/##CHR(13)##//##CHR(10)##/ //Система налогообложения/##CHR(13)##//##CHR(10)##/ //Если не будет передано значение, то в ньюджере по умолчанию будет указана СНО, выбранная по умолчанию при фискализации ньюджера./##CHR(13)##//##CHR(10)##/ //Возможные значения: 1 - Общая;/##CHR(13)##//##CHR(10)##/ // 2 - Упрощенная Доход;/##CHR(13)##//##CHR(10)##/ // 3 - Упрощенная Доход минус Расход;/##CHR(13)##//##CHR(10)##/ // 4 - Единый налог на вмененный доход;/##CHR(13)##//##CHR(10)##/ // 5 - Единый сельскохозяйственный налог;/##CHR(13)##//##CHR(10)##/ // 6 - Патентная система налогообложения;/##CHR(13)##//##CHR(10)##/ // 0 - СНО, заданное на ньюджере по умолчанию./##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 7, ТекущаяСтрока ].Value = 0;/##CHR(13)##//##CHR(10)##/ //способ расчета/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 8, ТекущаяСтрока ].Value = ЕСЛИ( paytype == 0, "", ЕСЛИ( paytype == 1, 3, 4) );/##CHR(13)##//##CHR(10)##/ //предмет расчета/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 9, ТекущаяСтрока ].Value = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ VAL(rsubject) ];/##CHR(13)##//##CHR(10)##/ //штрихкод/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 10, ТекущаяСтрока ].Value = ПОЛУЧИТЬСЛОВО( "," + ALLTRIM(barcode), ",", 1); //берем 1й ШК (больше нельзя)/##CHR(13)##//##CHR(10)##/ //секция/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 11, ТекущаяСтрока ].Value = ЕСЛИ( VAL( kkm_section ) == 0, 1, ЕСЛИ (VAL( kkm_section ) > 16, "", VAL( kkm_section )) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДЕдиницы=1;/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= 16 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF( ALLTRIM( НаименованиеЕдиницы ) == СООТВЕТСТВИЕИДЕДИНИЦ[ n ] )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДЕдиницы = n;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ИД единицы измерения/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 12, ТекущаяСтрока ].Value = ИДЕдиницы;/##CHR(13)##//##CHR(10)##/ //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 13, ТекущаяСтрока ].Value = НаименованиеЕдиницы;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Реквизиты для агентских товаров/##CHR(13)##//##CHR(10)##/ //ИД поставщика/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 14, ТекущаяСтрока ].Value = "";/##CHR(13)##//##CHR(10)##/ //Наименование поставщика/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 15, ТекущаяСтрока ].Value = "";/##CHR(13)##//##CHR(10)##/ //ИНН поставщика/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 16, ТекущаяСтрока ].Value = "";/##CHR(13)##//##CHR(10)##/ //Телефон поставщика/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 17, ТекущаяСтрока ].Value = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекущаяСтрока ++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.SaveAs( path_out );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'28.01.2019 11:46:26') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с ньюджерами АТОЛ через Excel','ККМ',0.00000000,'',0.00000000,5912.00000000,0,'',0.00000000,'','',0,'FC8EE7C1-8E55-4752-8E1E-2CC2905938F2',0,1,0,'14.02.2019 21:50:24') #begin #description Эмулятор ТСД (чтение марок из файла) #name Эмулятор ТСД (чтение марок из файла) #code 0000000151 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД. /##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ИндексУстройства целое число начиная с 0./##CHR(13)##//##CHR(10)##///Вызывается в момент, когда необходимо получить имя устройства, зарегистрированного в драйвере ТСД. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую имя устройства, соответствующее указанному индексу./##CHR(13)##//##CHR(10)##/RETURN "Эмулятор ТСД";',0,0,1,0,'06.02.2019 0:54:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД. /##CHR(13)##//##CHR(10)##///Вызывается в момент, когда необходимо получить количество зарегистрированных устройств в драйвере ТСД. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, соответвтующее количеству устройст./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'06.02.2019 0:54:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 250 ) AS barcode SET FMTONLY OFF", "Марки" );/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Марки", "CSV", "D:\Марки.txt" );/##CHR(13)##//##CHR(10)##/ВЫГРУЗИТЬ( ИМЯТАБЛИЦЫ, "barcode", "", "Марки" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.02.2019 0:54:54') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Эмулятор ТСД (чтение марок из файла)','ТСД',0.00000000,'',0.00000000,10226.00000000,0,'',0.00000000,'','',0,'F276DCD1-C7AD-49E6-8393-9F4E8BB8B91E',0,1,0,'06.02.2019 0:54:58') #begin #description HTTP сервер #name HTTP сервер #code 0000000153 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1300.00000000,'//Обработка сервера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Соединение = СОКЕТСОЕДИНИТЬ( __СОКЕТ );/##CHR(13)##//##CHR(10)##/Строка = СОКЕТПОЛУЧИТЬ( Соединение, CHR( 13 ) + CHR( 10 ), "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДлинаДанных = 0;/##CHR(13)##//##CHR(10)##/PostЗапрос = LEFT( Строка, 4 ) == "POST";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФАЙЛОТКРЫТЬ( "d:\text.txt", 1, 1 );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ФайлЖурнала, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( ФайлЖурнала, Строка );/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( Строка ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = СОКЕТПОЛУЧИТЬ( Соединение, CHR( 13 ) + CHR( 10 ), "S" );/##CHR(13)##//##CHR(10)##/ IF ( LEFT( Строка, 16 ) == "Content-Length: " )/##CHR(13)##//##CHR(10)##/ ДлинаДанных = VAL( ПОДСТРОКА( Строка, 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ФайлЖурнала, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( ФайлЖурнала, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗаголовокОтвета = "HTTP/1.1 200 OK" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Content-Type: text/html;charset=utf-8" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Content-Length: $$CONTENTLEN$$" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Cache-Control: max-age=1, must-revalidate" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Expires: Fri, 25 Jan 2019 00:00:00 GMT" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "ETag: " + УНИКАЛЬНОЕИМЯ( ) + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Server: Jetty(8.1.0.RC0)" + CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( PostЗапрос AND ДлинаДанных > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = СОКЕТПОЛУЧИТЬ( Соединение, CHR( 13 ) + CHR( 10 ), "S", ДлинаДанных );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ФайлЖурнала, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоличествоПараметров = HTMLОтчеты.РазобратьПараметры( Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Стили = HTMLОтчеты.ТаблицаСтилей( );/##CHR(13)##//##CHR(10)##/БлокПараметров = HTMLОтчеты.HTMLБлокаПараметров( );/##CHR(13)##//##CHR(10)##/ТекстОтчета = HTMLОтчеты.HTMLТекстаОтчета( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ( "/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Айтида: Отчеты по товарам/##CHR(13)##//##CHR(10)##/ " + Стили + "/##CHR(13)##//##CHR(10)##/ " + БлокПараметров + "/##CHR(13)##//##CHR(10)##/
" + ТекстОтчета + "/##CHR(13)##//##CHR(10)##/", "ANSI", "UTF-8" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СОКЕТПЕРЕДАТЬ( Соединение, ЗАМЕНИТЬ( ЗаголовокОтвета, "$$CONTENTLEN$$", STR( LEN( Ответ ) ) ) + Ответ );/##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##/СОКЕТЗАКРЫТЬ( Соединение );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'23.03.2019 18:40:09') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','HTTP сервер','ДСЕРВЕР',8090.00000000,'',0.00000000,12637.00000000,0,'',0.00000000,'','',0,'F340B532-0664-42B2-8A28-14F2203FBE49',0,1,0,'31.10.2019 11:24:46') #begin #description Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.5 #name Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.5 #code 0000000154 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts Магазин15";',0,0,1,0,'25.04.2019 17:49:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'25.04.2019 17:49:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'25.04.2019 17:49:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ИНДИКАТОР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "Цена";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'25.04.2019 17:49:35') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.5','ТСД',0.00000000,'',0.00000000,6069.00000000,0,'',0.00000000,'','',0,'2A1BB94C-8B42-4C9B-AAC1-41422BDA59D5',0,1,0,'25.04.2019 17:49:43') #begin #description Обмен данными с Фронтол 5.2 #name Обмен данными с Фронтол 5.2 #code 0000000047 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлОтветаФронтол = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) ) + "LoadResult.txt";/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" ) ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + ",1,1,1," + ЕСЛИ( enterqty, "0", "1" ) + ",1,1," + ЕСЛИ( enterqty, "1", "0" );/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + STDE( mName, 100 ) + ";" + STDE( mCname, 100 ) + ";" + mCena + ";" + mTmcSaldo + ";;" +/##CHR(13)##//##CHR(10)##/ mFlags + ";" + mMin_cena + ";"+ mStore_period + ";" + mAspect_sch + ";" + mAspect_var + ";" + rsubject + ";;;" + /##CHR(13)##//##CHR(10)##/ mParent + ";1;0;0;;;;" + mKodn + ";;" + mPlu + ";" + mArticle + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mDsc_value + ";" + mActionPriz + ";" + mCheckPrinter + ";" + mImage_path +";" + /##CHR(13)##//##CHR(10)##/ mNote + ";;0;;;" + mKkm_section + ";;" + kodGrPintChek + ";" + kodGrPintCopy + ";" + kodGrPintInvoice + ";" + kodGrPintMark + ";;;;;" + /##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + ЛеваяГраница + ";" + ПраваяГраница + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";;;;" + mNNVid + ";" + mVolume + ";1;" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + mAProc, ";;;;;;;;" ) + ";" + paytype;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( STR( koef, 16, 4 ), ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, egais.alcocode/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, СписокАлкокодов.maincode + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка спец цен из переоценки/##CHR(13)##//##CHR(10)##/ // Выводим все переоценки, для которых еще не закончилась акция/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM spr005 /##CHR(13)##//##CHR(10)##/ WHERE DATEDIFF( day, endaction, GETDATE( ) ) <= 0 AND EXISTS( SELECT * FROM reg008 WHERE code =''005'' AND ic = spr005.identity_column ) /##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "Переоценка" );/##CHR(13)##//##CHR(10)##/ // Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Переоценка" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КОДАКЦИИ = STR( 1000000000 + Переоценка.identity_column );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode AS subcode, sprnn.nngroup, sprnn.d_code AS aspect, spec.cena, sprnn.f_subres, sprnn_main.maincode AS code /##CHR(13)##//##CHR(10)##/ FROM spec005 spec /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprnn sprnn_main ON sprnn.subcode = sprnn_main.nn /##CHR(13)##//##CHR(10)##/ WHERE spec.cena > 0 AND spec.ic = " + Переоценка.identity_column, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + DTOC( Переоценка.date ) + ";" + DTOC( Переоценка.endaction ) + ";;;СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;1;0;1;1;1" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем список товаров и разрезов/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_subres AND !ПУСТО( СписокТоваров.code ) AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( ЕСЛИ( СписокТоваров.f_subres, СписокТоваров.subcode, СписокТоваров.code ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + STR( СписокТоваров.cena, 16, 2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + КОДАКЦИИ +";СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;8;" + Строка + ";" + СписокХар + ";" + Строка2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Переоценка" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем 20 секунд появления LoadResult.txt/##CHR(13)##//##CHR(10)##///Время = TickCount( );/##CHR(13)##//##CHR(10)##///WHILE ( !ФАЙЛ( ФайлОтветаФронтол ) && TickCount( ) - Время < 20000 ) Ожидание( 1000 );/##CHR(13)##//##CHR(10)##///IF ( ФАЙЛ( ФайлОтветаФронтол ) )/##CHR(13)##//##CHR(10)##/// ВЫПОЛНИТЬ( "notepad", ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФАЙЛОТКРЫТЬ( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/КодКассы = КодОборудования;/##CHR(13)##//##CHR(10)##/РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52" ) == "L" )/##CHR(13)##//##CHR(10)##/ РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = _РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( VAL( GetWord( string, ";", ";", 6 ) ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34, 80, 27 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодКассы = ЗАПРОС( "SELECT code FROM sprequipment WHERE ex_code = ''" + POSNumber + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодКассы ) )/##CHR(13)##//##CHR(10)##/ kkmsklad = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code = ''" + КодКассы + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( chequeType <> "0" ) docid ++;/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( SummWD ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ // ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "30" OR tranzType == "31" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1, equipment )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + ", ''" + КодКассы + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.05.2019 12:58:26') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 5.2','ККМ',0.00000000,'',0.00000000,62.00000000,0,'',0.00000000,'','',0,'9EEA0848-F07F-4B7E-878B-6B4969EE50ED',0,1,0,'16.05.2019 12:58:26') #begin #description Обмен данными с СУПЕРМАГ #name Обмен данными с СУПЕРМАГ #code 0000000159 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT= true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИМЯФАЙЛАТОВАРОВ, ИМЯФАЙЛЦЕН, ИМЯФАЙЛАПАПОК;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Путь к формируемым файлам/##CHR(13)##//##CHR(10)##/IF ( RAT( path_out, "\" ) > 0 )/##CHR(13)##//##CHR(10)##/ ПУТЬКФАЙЛАМ = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ПУТЬКФАЙЛАМ = path_out + "\":/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN "";',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( НомерФайла == 1 ) RETURN ИМЯФАЙЛАПАПОК;/##CHR(13)##//##CHR(10)##/IF ( НомерФайла == 2 ) RETURN ИМЯФАЙЛАТОВАРОВ;/##CHR(13)##//##CHR(10)##/IF ( НомерФайла == 3 ) RETURN ИМЯФАЙЛАЦЕН;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( Файл( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ex_code, profile, password FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "[" + СправочникПользователей.ex_code + ";" + STDE( СправочникПользователей.name ) + ";" + STDE( СправочникПользователей.name ) );/##CHR(13)##//##CHR(10)##/ Skip( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для проверки наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ПУТЬКФАЙЛАМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Путь к формируемым файлам/##CHR(13)##//##CHR(10)##/IF ( RAT( path_in, "\" ) > 0 )/##CHR(13)##//##CHR(10)##/ ПУТЬКФАЙЛАМ = ЛЕВСИМВ( path_in, RAT( path_in, "\" ) );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ПУТЬКФАЙЛАМ = path_in + "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/естьФайлы = !ПУСТО( ФАЙЛНАЙТИ( ПУТЬКФАЙЛАМ + "*.xml" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN естьФайлы;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/естьФайлы = !ПУСТО( ФАЙЛНАЙТИ( ПУТЬКФАЙЛАМ + "*.xml" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( естьФайлы, 1, 0 );',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПУТЬКФАЙЛАМ;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТРАНЗАКЦИЮ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ tranzCount = ИДТранзакции + 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция открытия чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + STR( VAL( seller ) ) + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + kkmsklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ ИДТранзакции++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/СкладККМ = sklad; // Сохраняем поле склад/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/currentCard = "";/##CHR(13)##//##CHR(10)##/chequeType = "0";/##CHR(13)##//##CHR(10)##/ksnum = 1;/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CONVERT( varchar( 100 ), '''' ) AS storeId, CONVERT( varchar( 100 ), '''' ) AS posNum, /##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS shiftNum, CONVERT( varchar( 100 ), '''' ) AS receiptNum,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS receiptDateTime, CONVERT( varchar( 100 ), '''' ) AS cashierName,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS cashierCode, CONVERT( varchar( 100 ), '''' ) AS type,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS amount", "Чек" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CONVERT( varchar( 100 ), '''' ) AS position, CONVERT( varchar( 100 ), '''' ) AS article, /##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 150 ), '''' ) AS barcode, CONVERT( varchar( 100 ), '''' ) AS quantity,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS price, CONVERT( varchar( 100 ), '''' ) AS total,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS stockId, CONVERT( varchar( 100 ), '''' ) AS enterType,/##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 150 ), '''' ) AS egaisBarcode", "СтрокиЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CONVERT( varchar( 100 ), '''' ) AS paymentId, CONVERT( varchar( 100 ), '''' ) AS paymentName, /##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 150 ), '''' ) AS paymentAmount", "ОплатыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала загружаем чеки/##CHR(13)##//##CHR(10)##/сообщение( СЖАТЬПРОБЕЛЫ( ИмяФайла + "receipt*.xml" ) );/##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( ИмяФайла + "receipt*.xml" ), "СписокФайловЧеков" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка данных", КоличествоФайлов );/##CHR(13)##//##CHR(10)##/FOR ( НомерФайла = 0; НомерФайла < КоличествоФайлов; НомерФайла++ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛИТЬ( "ALL", "Чек" ); УДАЛИТЬ( "ALL", "СтрокиЧека" ); УДАЛИТЬ( "ALL", "ОплатыЧека" );/##CHR(13)##//##CHR(10)##/ // Загружаем XML в три приема в три контекста - общая информация о чеке, строки и список оплат/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "Чек", "XML", СписокФайловЧеков[ НомерФайла ], "", "", "", "item payment" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "СтрокиЧека", "XML", СписокФайловЧеков[ НомерФайла ], "item", "", "", "payment" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ОплатыЧека", "XML", СписокФайловЧеков[ НомерФайла ], "payment", "", "", "item" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "Чек" ); ПЕРЕЙТИВНАЧАЛО( "СтрокиЧека" ); ПЕРЕЙТИВНАЧАЛО( "ОплатыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НомерФайла, "Обработано файлов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Чек записывается следующими транзакциями/##CHR(13)##//##CHR(10)##/ // 42 - открытие чека/##CHR(13)##//##CHR(10)##/ // 11 - продажа/##CHR(13)##//##CHR(10)##/ // 43 - оплата/##CHR(13)##//##CHR(10)##/ // 55 - закрытие чека/##CHR(13)##//##CHR(10)##/ // Нет идентификатора транзакции, поэтому, нумеруем сами/##CHR(13)##//##CHR(10)##/ ИДТранзакции = ЗАПРОС( "SELECT MAX( tranzcount ) FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ date = CTOD( ЗАМЕНИТЬ( Чек.receiptDateTime, "T", " " ) , 7 );/##CHR(13)##//##CHR(10)##/ tranzType = "42";/##CHR(13)##//##CHR(10)##/ posNumber = VAL( ЗНАЧЕНИЕПОЛЯ( "Чек", "posNum", "0" ) );/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ seller = STR( VAL( ЗАПРОС( "SELECT maincode FROM sprempl WHERE ex_code=''" + ЗНАЧЕНИЕПОЛЯ( "Чек", "cashierCode", "" ) + "''" ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ chequeNumber = VAL( Чек.receiptNum );/##CHR(13)##//##CHR(10)##/ chequeType = VAL( Чек.type );/##CHR(13)##//##CHR(10)##/ ecrSession = VAL( Чек.shiftNum );/##CHR(13)##//##CHR(10)##/ karta = Чек.storeId + Чек.posNum + Чек.shiftNum + Чек.receiptNum;/##CHR(13)##//##CHR(10)##/ ecrNumber = VAL( Чек.posNum );/##CHR(13)##//##CHR(10)##/ universalNDOK = Чек.storeId + "/" + Чек.posNum + "/" + Чек.shiftNum + "/" + Чек.receiptNum;/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ kolp = 0.00;/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ summasale = VAL( Чек.amount );/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ summa = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Запомним ид транзакции, для последующего обновления её полей/##CHR(13)##//##CHR(10)##/ tranzCount42 = tranzCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СтрокиЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ nnname = "Свободная продажа";/##CHR(13)##//##CHR(10)##/ nn = СтрокиЧека.article;/##CHR(13)##//##CHR(10)##/ if ( !ПУСТО( nn ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm, s.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ warecode_org = ТОВАРИНФО.maincode;/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ kkmsklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/ firm = СПИСОКФР.firm;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ kolp = VAL( СтрокиЧека.quantity );/##CHR(13)##//##CHR(10)##/ price = VAL( СтрокиЧека.price );/##CHR(13)##//##CHR(10)##/ summasale = VAL( СтрокиЧека.total );/##CHR(13)##//##CHR(10)##/ discount = 0;/##CHR(13)##//##CHR(10)##/ summa = summasale + discount;/##CHR(13)##//##CHR(10)##/ cena = summa / ЕСЛИ( ROUND( kolp, 3 ) != 0, kolp, 1 );/##CHR(13)##//##CHR(10)##/ barcode = СтрокиЧека.egaisBarcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Считаем общее количество по чеку (для 55-1 и 42-1 транзакций)/##CHR(13)##//##CHR(10)##/ totalQuantity += kolp;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СтрокиЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Товар нашли/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запишем оплаты/##CHR(13)##//##CHR(10)##/ tranzType = "43";/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ summasale = 0.00;/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ОплатыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kolp = VAL( ОплатыЧека.paymentAmount );/##CHR(13)##//##CHR(10)##/ summa = kolp;/##CHR(13)##//##CHR(10)##/ AspectValue1 = ЕСЛИ( VAL( ЗНАЧЕНИЕПОЛЯ( "ОплатыЧека", "paymentId", "0" ) ) != 0, "2", "1" );/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ IF ( AspectValue1 == "2" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ОплатыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция закрытия чека/##CHR(13)##//##CHR(10)##/ tranzType = "55";/##CHR(13)##//##CHR(10)##/ kolp = totalQuantity;/##CHR(13)##//##CHR(10)##/ summa = VAL( ЗНАЧЕНИЕПОЛЯ( "Чек", "amount", 0 ) );/##CHR(13)##//##CHR(10)##/ summasale = summa;/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summa= ''" + STR( summa, 16, 2 ) + "'', summasale= ''" + STR( summa, 16, 2 ) + "'', kolp = ''" + STR( kolp, 16, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + tranzCount42 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( СписокФайловЧеков[ НомерФайла ], СписокФайловЧеков[ НомерФайла ] + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/doccode = "";/##CHR(13)##//##CHR(10)##/seller = "";/##CHR(13)##//##CHR(10)##/wareMark = "";/##CHR(13)##//##CHR(10)##/chequeNumber = 0;/##CHR(13)##//##CHR(10)##/chequeType = 9;/##CHR(13)##//##CHR(10)##/universalNDOK = "";/##CHR(13)##//##CHR(10)##/nn = "";/##CHR(13)##//##CHR(10)##/s_code = "";/##CHR(13)##//##CHR(10)##/nnname = "";/##CHR(13)##//##CHR(10)##/ed = "";/##CHR(13)##//##CHR(10)##/kodn = "";/##CHR(13)##//##CHR(10)##/client = "";/##CHR(13)##//##CHR(10)##/kolp = 0.00;/##CHR(13)##//##CHR(10)##/barcode = "";/##CHR(13)##//##CHR(10)##/summasale = 0.00;/##CHR(13)##//##CHR(10)##/summabn = 0.00;/##CHR(13)##//##CHR(10)##/summa = 0.00;/##CHR(13)##//##CHR(10)##/cena = 0.00;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/manager = "";/##CHR(13)##//##CHR(10)##/warecode_org = "";/##CHR(13)##//##CHR(10)##/AspectValue1 = "";/##CHR(13)##//##CHR(10)##/totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CONVERT( varchar( 100 ), '''' ) AS dateClose, CONVERT( varchar( 100 ), '''' ) AS storeId, /##CHR(13)##//##CHR(10)##/ CONVERT( varchar( 100 ), '''' ) AS shiftNum, CONVERT( varchar( 100 ), '''' ) AS posNum", "Смена" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала загружаем чеки/##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( ИмяФайла + "shift*.xml" ), "СписокФайловСмен" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка итогов смен", КоличествоФайлов );/##CHR(13)##//##CHR(10)##/FOR ( НомерФайла = 0; НомерФайла < КоличествоФайлов; НомерФайла++ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛИТЬ( "ALL", "Смена" ); /##CHR(13)##//##CHR(10)##/ // Загружаем XML в три приема в три контекста - общая информация о чеке, строки и список оплат/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "Смена", "XML", СписокФайловСмен[ НомерФайла ], "", "", "", "receipt" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "Смена" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ date = CTOD( ЗАМЕНИТЬ( ЗНАЧЕНИЕПОЛЯ( "Смена", "dateClose", "" ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ tranzType = "63";/##CHR(13)##//##CHR(10)##/ posNumber = VAL( Смена.posNum );/##CHR(13)##//##CHR(10)##/ ecrSession = VAL( Смена.shiftNum );/##CHR(13)##//##CHR(10)##/ karta = Смена.storeId + Смена.posNum + Смена.shiftNum + "XXXX";/##CHR(13)##//##CHR(10)##/ ecrNumber = VAL( Смена.posNum );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##/КодТорговойТочки = ЗАПРОС( "SELECT ex_code FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КодТорговойТочки ) ) /##CHR(13)##//##CHR(10)##/ КодТорговойТочки= СТРОКА( VAL( КОДОБОРУДОВАНИЯ ) );/##CHR(13)##//##CHR(10)##/ИМЯФАЙЛАЦЕН = ПУТЬКФАЙЛАМ + "storePrices_[" + КодТорговойТочки + "]_[1]_[" + ЕСЛИ( ПРИЗНАКОЧИСТКИККМ, "F", "I" ) + "].xml";/##CHR(13)##//##CHR(10)##/ИМЯФАЙЛАТОВАРОВ = ПУТЬКФАЙЛАМ + "updateItems_[" + КодТорговойТочки + "]_[1]_[" + ЕСЛИ( ПРИЗНАКОЧИСТКИККМ, "F", "I" ) + "].xml";/##CHR(13)##//##CHR(10)##/ИМЯФАЙЛАПАПОК = ПУТЬКФАЙЛАМ + "classif_[" + КодТорговойТочки + "]_[1]_[F].xml";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ДескрипторФайлаТоваров = ФАЙЛСОЗДАТЬ( ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайлаТоваров == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки товаров ''" + ИМЯФАЙЛАТОВАРОВ + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайлаЦен = ФАЙЛСОЗДАТЬ( ИМЯФАЙЛАЦЕН );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайлаЦен == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайлаТоваров );/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки цен товаров ''" + ИМЯФАЙЛАЦЕН + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛСОЗДАТЬ( ИМЯФАЙЛАПАПОК );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки папок товаров ''" + ИМЯФАЙЛА + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, CHR( 9 ) + "1.0" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДПапки = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 20000000, 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ ИДРодителя = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + IIF( ic < 0, 20000000, 10000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ ИмяПапки = ЕГАИС.ЗаменитьСимволы( LEFT( ALLTRIM( STRTRAN( name, ";", " ") ), 100 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, CHR( 9 ) + CHR( 9 ) + "" + ИДПапки + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, CHR( 9 ) + CHR( 9 ) + "" + ИДРодителя + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + ИмяПапки + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла ); /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 3;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/mEdn = ТоварИнфо.ed;/##CHR(13)##//##CHR(10)##/mAlcoType = ЕСЛИ( !mAlco, 0, ЕСЛИ( !ПивнаяПродукция, 1, 2 ) );/##CHR(13)##//##CHR(10)##/mPrecision = ЕСЛИ( fractqty, "0.001", "1" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем макс. скидку: если -1, то -1, если 0, то 0 и т.д./##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, ALLTRIM( STR( maxdiscount, 16, 2 ) ), "0");/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Остаток/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1","" );/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM(STR(IIF(parent == 0, 0, ABS(parent) + IIF(parent < 0, 20000000, 10000000))));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), mCena );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "
" + mCode + "
", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + ЕГАИС.ЗаменитьСимволы( mName ) + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + ЕГАИС.ЗаменитьСимволы( mEdn ) + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + mPrecision + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + mParent + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + mAlcoType + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + mKodn + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Сразу добавляем строки для выгрузки штриховых кодов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT koef, barcode, code, aspectlist /##CHR(13)##//##CHR(10)##/ FROM " + ШТРИХКОДЫ + " WHERE code =''" + mCode + "'' AND barcode <> ''''", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + ЕГАИС.ЗаменитьСимволы( barcode ) + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, ПЕРЕКОДИРОВАТЬ( CHR( 9 ) + CHR( 9 ) + "" + STRTRAN( ALLTRIM( STR( koef, 16, 3 ) ), ",", "." ) + "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, CHR( 9 ) + "
" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + CHR( 9 ) + CHR( 9 ) + "" + mCena + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + CHR( 9 ) + CHR( 9 ) + "" + mMin_cena + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, CHR( 9 ) + "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запсиываем завершения тэгов/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаТоваров, "
");/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайлаЦен, "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Теперь можно закрыть файлы/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайлаТоваров );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайлаЦен );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'26.08.2019 13:27:09') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с СУПЕРМАГ','ККМ',0.00000000,'',0.00000000,330.00000000,0,'',0.00000000,'','',0,'686DD71A-EC37-4D39-AC41-784E509B364F',0,1,0,'26.08.2019 13:27:09') #begin #description Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05) #name Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05) #code 0000000141 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ //ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Скидка = " + СкидкаНаценка);/##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( ВСЕГОСКИДКА <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = СкидкаНаценка + ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/ ВСЕГОСКИДКА = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Скидка = " + СкидкаНаценка);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("TOTALDISCOUNT = "+TOTALDISCOUNT);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("TOTALSALE = "+TOTALSALE);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = TOTALDISCOUNT;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/ComPort = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ЗакрытьПортКассы(); /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ЗакрытьПортКассы();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("ComPort") == "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЗакрытьПортКассы() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно закрыть порт COM"+VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Невозможно закрыть порт COM"+VAL(ИНДЕКСУСТРОЙСТВАККМ));/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер смены" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер чека" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log.txt";/##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, СтрокаДляЗаписи);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_Из_Любой_В_10( Значение1 , Нотация1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (Нотация1 <= 0) RETURN 0;/##CHR(13)##//##CHR(10)##/ Значение1 = ALLTRIM(Значение1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Значение1 == "0") RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Результат1 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлинаСтроки = ДЛИНА(Значение1);/##CHR(13)##//##CHR(10)##/ X=1;/##CHR(13)##//##CHR(10)##/ While (X <= ДлинаСтроки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=1;/##CHR(13)##//##CHR(10)##/ Y=1;/##CHR(13)##//##CHR(10)##/ WHILE (Y <= (ДлинаСтроки-X))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=M*Нотация1;/##CHR(13)##//##CHR(10)##/ Y++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ Результат1=Результат1+( AT( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ПОДСТРОКА(Значение1,X,1) ) - 1 )*M;/##CHR(13)##//##CHR(10)##/ X++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ROUND(Результат1, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_ИЗ_10_В_Любую( Значение2 , Нотация2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Нотация2 <= 0 ) RETURN "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = Число(Значение2);/##CHR(13)##//##CHR(10)##/ IF (Значение2 <= 0 ) RETURN "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2);/##CHR(13)##//##CHR(10)##/ Результат2="";/##CHR(13)##//##CHR(10)##/ WHILE (Значение2 > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат2 = ПОДСТРОКА( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение2 % Нотация2 +1 , 1 ) + Результат2;/##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2/Нотация2) ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат2;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _XOR ( A, B)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ A = Right("00000000"+A,8);/##CHR(13)##//##CHR(10)##/ B = Right("00000000"+B,8);/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ Результат = "";/##CHR(13)##//##CHR(10)##/ WHILE (n <= ДЛИНА(A))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "1" AND ПОДСТРОКА(B,n,1) == "1")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "0";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "0" AND ПОДСТРОКА(B,n,1) == "1")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "1";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "1" AND ПОДСТРОКА(B,n,1) == "0")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "1";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "0" AND ПОДСТРОКА(B,n,1) == "0")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ CalculateCRC( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА2 = ПОДСТРОКА( Команда,2,1);/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА3 = ПОДСТРОКА( Команда,3,1);/##CHR(13)##//##CHR(10)##/ Оп1 = Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА2 ),2);/##CHR(13)##//##CHR(10)##/ Оп2 = Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА3 ),2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВремРез = _XOR(Оп1, Оп2);/##CHR(13)##//##CHR(10)##/ k=4;/##CHR(13)##//##CHR(10)##/ WHILE (k <= ДЛИНА(Команда))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА_ = ПОДСТРОКА( Команда, k, 1 );/##CHR(13)##//##CHR(10)##/ ВремРез = _XOR( ВремРез, Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА_ ), 2 ) );/##CHR(13)##//##CHR(10)##/ k++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ВремРез;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ CRC = CalculateCRC(Команда);/##CHR(13)##//##CHR(10)##/ CRC10 = Перевести_Из_Любой_В_10(CRC,2);/##CHR(13)##//##CHR(10)##/ CRC16 = Перевести_ИЗ_10_В_Любую(CRC10,16);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДЛИНА( ALLTRIM( CRC16 ) ) == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CRC16="0"+CRC16;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда+CRC16;/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОткрытьПортКассы(НомерПорта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ComPort.CommPort = НомерПорта;/##CHR(13)##//##CHR(10)##/ ComPort.Settings = "57600,N,8,1";/##CHR(13)##//##CHR(10)##/ ComPort.PortOpen = true; /##CHR(13)##//##CHR(10)##/ WAIT(200);/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Не удалось открыть порт"); /##CHR(13)##//##CHR(10)##/ RETURN 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗакрытьПортКассы()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПредыдущийОтвет = ComPort.Input;/##CHR(13)##//##CHR(10)##/ WAIT(200);/##CHR(13)##//##CHR(10)##/ ComPort.PortOpen = false; /##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == false )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Не удалось закрыть порт"); /##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗагрузитьДрайвер()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") == "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = СоздатьОбъект("MsCommLib.MsComm.1", 1);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ЗагрузитьДрайвер() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось создать объект драйвера. Проверьте зарегистрирована ли в системе библиотека ""MSCOMM32.OCX""";/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ОткрытьПортКассы(НомерПорта) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ ПредОтвет = ComPort.Input;/##CHR(13)##//##CHR(10)##/ WAIT(ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ComPort.Output = СтрокаКоманды;/##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ WHILE (ПУСТО(Ответ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (n==1000) BREAK;/##CHR(13)##//##CHR(10)##/ WAIT(ЗадержкаКассовыхОпераций*2);/##CHR(13)##//##CHR(10)##/ Ответ = ComPort.Input;/##CHR(13)##//##CHR(10)##/ n = n + ЗадержкаКассовыхОпераций;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрывать порт будем в обработке Деактивации ФР/##CHR(13)##//##CHR(10)##/ //IF ( ЗакрытьПортКассы() == 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ // _ERRORTEXT = "Невозможно закрыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ // //СООБЩЕНИЕ(_ERRORTEXT);/##CHR(13)##//##CHR(10)##/ // RETURN false;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Кодманда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Ответ: " + Ответ;/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ComPort = false;/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0"))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //пытаемся/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = СоздатьОбъект("MsCommLib.MsComm.1", 1);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВопросДрайвер = "В системе не зарегистрирована библиотека ""MSCOMM32.OCX"", необходимая для прямой передачи данных в COM порт."+CHR(13)+/##CHR(13)##//##CHR(10)##/ ""+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Перейти к скачиванию библиотеки?";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(ВопросДрайвер, "Не установлен драйвер", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОтветНаВопрос == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СсылкаДляСкачивания = "http://itida.ru/download/drivers/MSCOMM32.zip";/##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ(СсылкаДляСкачивания);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Библиотека для прямой передачи данных в COM порт установлена!"+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);/##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##///06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/// 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/// 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,5953.00000000,0,'',0.00000000,'','',0,'AE09160C-D3D0-4EDA-9DA8-139AC2F44BE8',0,1,0,'29.05.2019 18:55:31') #begin #description Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000142 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //пытаемся/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = СоздатьОбъект("MsCommLib.MsComm.1", 1);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВопросДрайвер = "В системе не зарегистрирована библиотека ""MSCOMM32.OCX"", необходимая для прямой передачи данных в COM порт."+CHR(13)+/##CHR(13)##//##CHR(10)##/ ""+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Перейти к скачиванию библиотеки?";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(ВопросДрайвер, "Не установлен драйвер", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОтветНаВопрос == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СсылкаДляСкачивания = "http://itida.ru/download/drivers/MSCOMM32.zip";/##CHR(13)##//##CHR(10)##/ ВЫПОЛНИТЬ(СсылкаДляСкачивания);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Библиотека для прямой передачи данных в COM порт установлена!"+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);/##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ЗакрытьПортКассы(); /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ЗакрытьПортКассы();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',112.00000000,'//Печать заголовка чека./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///ПереноситьСтроки логическое ИСТИНА, если требуется переносить строки, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##///Обработка вызывается перед началом регистраций товаров и после открытия чека./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ } //IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ //ЦенаТовара = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Скидка = " + СкидкаНаценка);/##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( ВСЕГОСКИДКА <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = СкидкаНаценка + ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/ ВСЕГОСКИДКА = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Скидка = " + СкидкаНаценка);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("TOTALDISCOUNT = "+TOTALDISCOUNT);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("TOTALSALE = "+TOTALSALE);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##///таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = TOTALDISCOUNT;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ИмяТаблицыСтрокСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0"))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/ComPort = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Справка по таблице налогов/##CHR(13)##//##CHR(10)##///Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##///04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##///01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##///06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##///05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/// 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/// 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("ComPort") == "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЗакрытьПортКассы() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно закрыть порт COM"+VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Невозможно закрыть порт COM"+VAL(ИНДЕКСУСТРОЙСТВАККМ));/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log.txt";/##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, СтрокаДляЗаписи);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_Из_Любой_В_10( Значение1 , Нотация1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (Нотация1 <= 0) RETURN 0;/##CHR(13)##//##CHR(10)##/ Значение1 = ALLTRIM(Значение1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Значение1 == "0") RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Результат1 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлинаСтроки = ДЛИНА(Значение1);/##CHR(13)##//##CHR(10)##/ X=1;/##CHR(13)##//##CHR(10)##/ While (X <= ДлинаСтроки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=1;/##CHR(13)##//##CHR(10)##/ Y=1;/##CHR(13)##//##CHR(10)##/ WHILE (Y <= (ДлинаСтроки-X))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=M*Нотация1;/##CHR(13)##//##CHR(10)##/ Y++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ Результат1=Результат1+( AT( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ПОДСТРОКА(Значение1,X,1) ) - 1 )*M;/##CHR(13)##//##CHR(10)##/ X++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ROUND(Результат1, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_ИЗ_10_В_Любую( Значение2 , Нотация2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Нотация2 <= 0 ) RETURN "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = Число(Значение2);/##CHR(13)##//##CHR(10)##/ IF (Значение2 <= 0 ) RETURN "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2);/##CHR(13)##//##CHR(10)##/ Результат2="";/##CHR(13)##//##CHR(10)##/ WHILE (Значение2 > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат2 = ПОДСТРОКА( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение2 % Нотация2 +1 , 1 ) + Результат2;/##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2/Нотация2) ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат2;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _XOR ( A, B)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ A = Right("00000000"+A,8);/##CHR(13)##//##CHR(10)##/ B = Right("00000000"+B,8);/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ Результат = "";/##CHR(13)##//##CHR(10)##/ WHILE (n <= ДЛИНА(A))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "1" AND ПОДСТРОКА(B,n,1) == "1")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "0";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "0" AND ПОДСТРОКА(B,n,1) == "1")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "1";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "1" AND ПОДСТРОКА(B,n,1) == "0")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "1";/##CHR(13)##//##CHR(10)##/ IF (ПОДСТРОКА(A,n,1) == "0" AND ПОДСТРОКА(B,n,1) == "0")/##CHR(13)##//##CHR(10)##/ Результат = Результат + "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ CalculateCRC( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА2 = ПОДСТРОКА( Команда,2,1);/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА3 = ПОДСТРОКА( Команда,3,1);/##CHR(13)##//##CHR(10)##/ Оп1 = Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА2 ),2);/##CHR(13)##//##CHR(10)##/ Оп2 = Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА3 ),2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВремРез = _XOR(Оп1, Оп2);/##CHR(13)##//##CHR(10)##/ k=4;/##CHR(13)##//##CHR(10)##/ WHILE (k <= ДЛИНА(Команда))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА_ = ПОДСТРОКА( Команда, k, 1 );/##CHR(13)##//##CHR(10)##/ ВремРез = _XOR( ВремРез, Перевести_ИЗ_10_В_Любую( КОДСИМВОЛА( ПОДСТРОКА_ ), 2 ) );/##CHR(13)##//##CHR(10)##/ k++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ВремРез;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ CRC = CalculateCRC(Команда);/##CHR(13)##//##CHR(10)##/ CRC10 = Перевести_Из_Любой_В_10(CRC,2);/##CHR(13)##//##CHR(10)##/ CRC16 = Перевести_ИЗ_10_В_Любую(CRC10,16);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДЛИНА( ALLTRIM( CRC16 ) ) == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CRC16="0"+CRC16;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда+CRC16;/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОткрытьПортКассы(НомерПорта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ComPort.CommPort = НомерПорта;/##CHR(13)##//##CHR(10)##/ ComPort.Settings = "57600,N,8,1";/##CHR(13)##//##CHR(10)##/ ComPort.PortOpen = true; /##CHR(13)##//##CHR(10)##/ WAIT(200);/##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == true )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Не удалось открыть порт"); /##CHR(13)##//##CHR(10)##/ RETURN 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗакрытьПортКассы()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПредыдущийОтвет = ComPort.Input;/##CHR(13)##//##CHR(10)##/ WAIT(200);/##CHR(13)##//##CHR(10)##/ ComPort.PortOpen = false; /##CHR(13)##//##CHR(10)##/ IF ( ComPort.PortOpen == false )/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Не удалось закрыть порт"); /##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗагрузитьДрайвер()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") == "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = СоздатьОбъект("MsCommLib.MsComm.1", 1);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ComPort = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("ComPort") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ЗагрузитьДрайвер() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось создать объект драйвера. Проверьте зарегистрирована ли в системе библиотека ""MSCOMM32.OCX""";/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ОткрытьПортКассы(НомерПорта) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ ПредОтвет = ComPort.Input;/##CHR(13)##//##CHR(10)##/ WAIT(ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ComPort.Output = СтрокаКоманды;/##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ WHILE (ПУСТО(Ответ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (n==1000) BREAK;/##CHR(13)##//##CHR(10)##/ WAIT(ЗадержкаКассовыхОпераций*2);/##CHR(13)##//##CHR(10)##/ Ответ = ComPort.Input;/##CHR(13)##//##CHR(10)##/ n = n + ЗадержкаКассовыхОпераций;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрывать порт будем в обработке Деактивации ФР/##CHR(13)##//##CHR(10)##/ //IF ( ЗакрытьПортКассы() == 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ // _ERRORTEXT = "Невозможно закрыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ // //СООБЩЕНИЕ(_ERRORTEXT);/##CHR(13)##//##CHR(10)##/ // RETURN false;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Кодманда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Ответ: " + Ответ;/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ComPort = false;/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР( ИмяТаблицыСтрокСлипа )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта, _ERROR, _ERRORTEXT;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ШИРИНАЛЕНТЫ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ШИРИНАЛЕНТЫ;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',113.00000000,'//Печать подвала чека./##CHR(13)##//##CHR(10)##/',0,0,1,0,'29.05.2019 18:55:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4 (прямая передача в COM) (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,5959.00000000,0,'',0.00000000,'','',0,'93CA5E36-8D57-4589-AE10-501F7BDA153B',0,1,0,'29.05.2019 18:55:31') #begin #description Профиль ТСД Data Mobile v.2 (с созданием новых товаров) #name Профиль ТСД Data Mobile v.2 (с созданием новых товаров) #code 0000000164 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Data Mobile";',0,0,1,0,'03.07.2019 14:19:22') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'03.07.2019 14:19:22') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN\", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ШтрихКод + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'03.07.2019 14:19:22') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##/СОЗДАВАТЬТОВАРЫ = true; //признак необходимости создания товаров, если не нашли в базе при загрузке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT\", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если в идентификаторе товара встретили dm то товар был создан на ТСД/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND ATC(КодТовара,"dm") > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СОЗДАНИЕ ТОВАРОВ/##CHR(13)##//##CHR(10)##/ IF ( СОЗДАВАТЬТОВАРЫ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПАПКАДЛЯНОВЫХТОВАРОВ = ЗАПРОС("SELECT identity_column FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND name = ''Справочник''");/##CHR(13)##//##CHR(10)##/ КОДНАЛОГА = ЗАПРОС( "SELECT value FROM param WHERE param = ''kodn''" );/##CHR(13)##//##CHR(10)##/ ЕДИНИЦАИЗМЕРЕНИЯ = "шт";/##CHR(13)##//##CHR(10)##/ КОДГРУППЫРЕСУРСОВ = "";/##CHR(13)##//##CHR(10)##/ МИНИМАЛЬНЫЙОСТАТОК = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬ = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАН = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАНЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ // Добвляем новый товар в нужную папку/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "INSERT INTO sprres ( code, maincode, name, shortname, alcocode, cat, kodn, note, ccgroup, group_, parent,/##CHR(13)##//##CHR(10)##/ ed, min_, lossrealization, lossstore, lossreal_val, lossstore_val )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ '''', dbo.fn_getnextmaincode( ), ''" + Наименование + "'', ''" + Наименование + "'', ''" + АлкоКод + "'', ''001'', ''" + КОДНАЛОГА + "'', ''Товар добавлен при загрузке из ТСД'',/##CHR(13)##//##CHR(10)##/ ''0000000001'', ''" + КОДГРУППЫРЕСУРСОВ + "'', " + ПАПКАДЛЯНОВЫХТОВАРОВ + ", ''" + ЕДИНИЦАИЗМЕРЕНИЯ + "'', " + STR( МИНИМАЛЬНЫЙОСТАТОК, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ''" + ЕСТУБЫЛЬ + "'', ''" + ЕСТУБЫЛЬХРАН + "'', " + STR( ЕСТУБЫЛЬЗНАЧ, 16 ,2 ) + ", " + STR( ЕСТУБЫЛЬХРАНЗНАЧ, 16, 2 ) + " ) " );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE identity_column = " + ИДТовара );/##CHR(13)##//##CHR(10)##/ //запишем штрихкод/##CHR(13)##//##CHR(10)##/ ИДШтрихкода = ЗАПРОС("INSERT INTO sprnnbc (nn, bc)/##CHR(13)##//##CHR(10)##/ VALUES (''" + Товар + "'',''" + ШтрихКод + "'')");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //КОНЕЦ СОЗДАНИЯ ТОВАРОВ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'03.07.2019 14:19:22') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2 (с созданием новых товаров)','ТСД',0.00000000,'',0.00000000,6179.00000000,0,'',0.00000000,'','',0,'576198B6-C038-422F-9394-FDF1347DA7BA',0,1,0,'19.07.2019 11:38:35') #begin #description Весы Масса-К драйвер 100 #name Весы Масса-К драйвер 100 #code 0000000170 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "MassaKDriver100.Scales", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Catch()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера. " + CHR(13) + "Установите MACCA-K: Драйвер 100 для работы с весами." );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/НомерПорта = VAL( ЗАПРОС("SELECT com_n FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''") );/##CHR(13)##//##CHR(10)##/IF ( ПУСТО(НомерПорта) OR НомерПорта == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если номер порта не заполнен, то подключаемся к весам по IP/##CHR(13)##//##CHR(10)##/ IPport = 5100;/##CHR(13)##//##CHR(10)##/ IPaddres = ALLTRIM( ЗАПРОС("SELECT IP_ADDR FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''") );/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(IPaddres))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не установлены параметры соединения с весами. " + CHR(13) + "Укажите номер порта весов или IP адрес весов в карточке оборудования." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Если весы подключены через Wi-Fi/Ethernet, то номер COM-порта необходимо установить равным 0 и указать IP адрес.");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПорта = IPaddres + ":" + IPport;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если номер порта указан/##CHR(13)##//##CHR(10)##/ НомерПорта = "COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ДрайверВесов.Connection = НомерПорта;/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.OpenConnection() == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ res = ДрайверВесов.ReadWeight();/##CHR(13)##//##CHR(10)##/ IF ( res == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ res = ДрайверВесов.Division; //Обработка размерности одного деления весов/##CHR(13)##//##CHR(10)##/ КоэффПересчета = 1;/##CHR(13)##//##CHR(10)##/ IF ( res == 0 ) //милиграммы/##CHR(13)##//##CHR(10)##/ КоэффПересчета = 0.000001;/##CHR(13)##//##CHR(10)##/ ELSE IF ( res == 1 ) //граммы/##CHR(13)##//##CHR(10)##/ КоэффПересчета = 0.001;/##CHR(13)##//##CHR(10)##/ ELSE IF ( res == 2 ) //килограммы /##CHR(13)##//##CHR(10)##/ КоэффПересчета = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВесСтабилен = ДрайверВесов.Stable;/##CHR(13)##//##CHR(10)##/ ЗначениеВесаНаВесах = ДрайверВесов.Weight * КоэффПересчета;/##CHR(13)##//##CHR(10)##/ //получаем только стабилизированный вес/##CHR(13)##//##CHR(10)##/ IF ( ВесСтабилен == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вес = ЗначениеВесаНаВесах;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СООБЩЕНИЕ("Вес на весах ещё не стабилизировался. " + CHR(13) + "Все равно установить вес " + ALLTRIM(ЗначениеВесаНаВесах) + " кг?", "Получение веса с весов", 4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вес = ЗначениеВесаНаВесах;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка чтения веса с весов: ReadWeight() = " + res );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключится к весам. " + CHR(13) + "Проверьте соединение кабеля или параметры связи в карточке оборудования." );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///закрываем соединение с весами/##CHR(13)##//##CHR(10)##/ДрайверВесов.CloseConnection();/##CHR(13)##//##CHR(10)##///уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##///возвращаем вес/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'25.07.2019 10:38:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'25.07.2019 10:38:11') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы Масса-К драйвер 100','ВЕСЫБЭ',0.00000000,'',0.00000000,636.00000000,0,'',0.00000000,'','',0,'6E068A1B-8690-4376-AFBC-731D1690E74D',0,1,0,'31.10.2019 11:24:46') #begin #description Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.7 #name Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.7 #code 0000000171 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "Цена";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'16.08.2019 10:09:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'16.08.2019 10:09:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "MobileSmarts Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'16.08.2019 10:09:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'16.08.2019 10:09:11') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.7','ТСД',0.00000000,'',0.00000000,6069.00000000,0,'',0.00000000,'','',0,'537A2824-E77D-43C4-8F67-4633E1973111',0,1,0,'16.08.2019 10:09:32') #begin #description Выгрузка товаров в Excel для Атол SIGMA #name Выгрузка товаров в Excel для Атол SIGMA #code 0000000173 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определим дату из наименования файла/##CHR(13)##//##CHR(10)##/ИмяФайлаРасширение = RIGHT( path_in, LEN(path_in) - RAT(path_in,"."));/##CHR(13)##//##CHR(10)##/ИмяФайлаЗагрузкиБезРасширения = STRTRANC( STRTRANC( STRTRANC ( path_in, ИмяФайлаРасширение, "") , "*", ""), ".", "");/##CHR(13)##//##CHR(10)##/ИмяФайлаДата = STRTRANC( STRTRANC( STRTRANC(ИмяФайла,ИмяФайлаЗагрузкиБезРасширения,""), ИмяФайлаРасширение, ""), ".", "");/##CHR(13)##//##CHR(10)##/ДатаИзИмениФайлаСтрокой = STRTRANC( ИмяФайлаДата , "_", ".");/##CHR(13)##//##CHR(10)##/IF ( AT (ДатаИзИмениФайлаСтрокой, "-") > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Загрузка данных за диапазон дат не поддерживается.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ДатаИзИмениФайла = ДатаИзИмениФайлаСтрокой;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Нет идентификатора транзакции, поэтому, нумеруем сами/##CHR(13)##//##CHR(10)##/ИДТранзакции = ЗАПРОС( "SELECT MAX( tranzcount ) FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/kkmfirm = firm;/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Open( ИмяФайла );/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Определяем размеры матрицы/##CHR(13)##//##CHR(10)##/rowCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].ROW;/##CHR(13)##//##CHR(10)##/columnCount = cMSEDS.Cells[1,1].SpecialCells[ 11 ].COLUMN;/##CHR(13)##//##CHR(10)##/curY = 2;/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Чтение файла с данными.", rowCount );/##CHR(13)##//##CHR(10)##/WHILE ( curY < rowCount )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( curY, "Прочитано " + curY + " из " + rowCount );/##CHR(13)##//##CHR(10)##/ curY++;/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ tranzCount = ИДТранзакции + 1;/##CHR(13)##//##CHR(10)##/ tranzDate = ДатаИзИмениФайла;/##CHR(13)##//##CHR(10)##/ tranzTime = "00:00:00.000";/##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ POSNumber = "1";/##CHR(13)##//##CHR(10)##/ chequeNumber = "1";/##CHR(13)##//##CHR(10)##/ Seller = "0";/##CHR(13)##//##CHR(10)##/ wareCode = STR( INT( VAL( cMSEDS.Cells[ 1, curY ].Value ) ) );/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ Price = cMSEDS.Cells[ 5, curY ].Value;/##CHR(13)##//##CHR(10)##/ Quantity = cMSEDS.Cells[ 4, curY ].Value;/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ ecrSession = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = cMSEDS.Cells[ 8, curY ].Value;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = "";/##CHR(13)##//##CHR(10)##/ barcode = cMSEDS.Cells[ 2, curY ].Value;/##CHR(13)##//##CHR(10)##/ Summ = Price * Quantity;/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ firm = kkmfirm;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = cMSEDS.Cells[ 3, curY ].Value;/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = ЕСЛИ( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = ЕСЛИ( !ПУСТО( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = ЕСЛИ( !ПУСТО( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ЕСЛИ( ПУСТО( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = ЕСЛИ( ПУСТО( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = ЕСЛИ( ПУСТО( ТОВАРИНФО.firm ), kkmfirm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( wareCode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ ИДТранзакции++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.Close( false );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Полная выгрузка товаров в Excel./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MSExcel = СОЗДАТЬОБЪЕКТ( "Excel.Application" );/##CHR(13)##//##CHR(10)##/cMSEDSW = MSExcel.WorkBooks.Add( );/##CHR(13)##//##CHR(10)##///MSExcel.Visible = true;/##CHR(13)##//##CHR(10)##/cMSEDS = cMSEDSW.Sheets[ 1 ];/##CHR(13)##//##CHR(10)##/// Выводим строки заголовки/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 1, 1 ].Value = "Наименование";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 2, 1 ].Value = "Артикул";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 3, 1 ].Value = "Единица измерения";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 4, 1 ].Value = "Штрихкод";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 5, 1 ].Value = "Категория";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 6, 1 ].Value = "НДС";/##CHR(13)##//##CHR(10)##/cMSEDS.Cells[ 7, 1 ].Value = "Цена";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекущаяСтрока = 2;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed AS sprres_ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, ISNULL( sprres_g.paytype, '''' ) AS paytype,/##CHR(13)##//##CHR(10)##/ (SELECT name FROM spectree WHERE objtype = ''SPR'' AND ic = temp.parent) AS parentname";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ТекстЗапроса = ТекстЗапроса + " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode/##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( ТекстЗапроса, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ OR cena > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //наименование товара (128 символов)/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 1, ТекущаяСтрока ].Value = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 128 ); //LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 128 ); /##CHR(13)##//##CHR(10)##/ //артикул товара (код)/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 2, ТекущаяСтрока ].Value = ALLTRIM( VAL(code) );/##CHR(13)##//##CHR(10)##/ //единица измерения/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 3, ТекущаяСтрока ].Value = ALLTRIM(sprres_ed);/##CHR(13)##//##CHR(10)##/ //Штрихкод/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 4, ТекущаяСтрока ].Value = ПОЛУЧИТЬСЛОВО( "," + ALLTRIM(barcode), ",", 1); //берем 1й ШК (больше нельзя);/##CHR(13)##//##CHR(10)##/ //Категория/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 5, ТекущаяСтрока ].Value = ALLTRIM(parentname);/##CHR(13)##//##CHR(10)##/ //Ставка НДС/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 6, ТекущаяСтрока ].Value = ЕСЛИ( kodn == "04", "20", ЕСЛИ( kodn == "05", "Без НДС", ЕСЛИ( kodn == "01", "10", "Без НДС" ) ) );/##CHR(13)##//##CHR(10)##/ //цена/##CHR(13)##//##CHR(10)##/ cMSEDS.Cells[ 7, ТекущаяСтрока ].Value = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекущаяСтрока ++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем MSExcel/##CHR(13)##//##CHR(10)##/MSExcel.DisplayAlerts = false;/##CHR(13)##//##CHR(10)##/cMSEDSW.SaveAs( path_out );/##CHR(13)##//##CHR(10)##/MSExcel.Quit( );/##CHR(13)##//##CHR(10)##/cMSEDS = false;/##CHR(13)##//##CHR(10)##/cMSEDSW = false;/##CHR(13)##//##CHR(10)##/MSExcel = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФАЙЛНАЙТИ( СЖАТЬПРОБЕЛЫ( path_in ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/КоличествоФайлов = 1;/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'15.10.2019 15:08:07') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Выгрузка товаров в Excel для Атол SIGMA','ККМ',0.00000000,'',0.00000000,6202.00000000,0,'',0.00000000,'','',0,'6394DE29-4B0C-4B08-BBAC-CE5F499A8D24',0,1,0,'15.10.2019 15:08:22') #begin #description Профиль ОНЛАЙН-ККТ "WEBKASSA" (Казахстан) и ФР/ПД Штрих v.3 #name Профиль ОНЛАЙН-ККТ "WEBKASSA" (Казахстан) и ФР/ПД Штрих v.3 #code 0000000174 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Начало оплаты'', 0, 0)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = ПередатьТекстЧекаВебКасса();/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Результат 1: " + Результат);/##CHR(13)##//##CHR(10)##/ IF ( Результат <> true AND Результат == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ПередатьТекстЧекаВебКасса();/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Результат 2: " + Результат);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Результат == true AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ЧЕК ПЕРЕДАЛИ. ПЕЧАТАЕМ.");/##CHR(13)##//##CHR(10)##/ Результат = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если печать завершилась ошибкой, то предложим повторить печать, т.к. в вебкассе чек завершился успешно/##CHR(13)##//##CHR(10)##/ IF ( Результат == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Результат == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ, но транзакция прошла в сервисе Webkassa." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Чек не напечатан на ленте.";/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать чек на чековой ленте?" + CHR(13) + "ВНИМАНИЕ! Чек будет записан в базу, т.к. успешно завершился в сервисе WEBKASSA.";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати");/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОтправитьЗапросXОтчет()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ НаименованиеОтчета = "X-Отчет";/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, false );/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СНВебКассы = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //Текст запроса json/##CHR(13)##//##CHR(10)##/ ТелоЗапроса = /##CHR(13)##//##CHR(10)##/ "{/##CHR(13)##//##CHR(10)##/ ""Token"":""" + ТокенВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""CashboxUniqueNumber"":""" + СНВебКассы + """/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Соединение с сервисом WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/XReport";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, МАССИВИЗСТРОКИ( ПЕРЕКОДИРОВАТЬ( ТелоЗапроса, "ANSI", "UTF-8" ) ), "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ Data = "";/##CHR(13)##//##CHR(10)##/ Errors = "";/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = false;/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "";/##CHR(13)##//##CHR(10)##/ КодОшибки = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Errors))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Errors:" + ALLTRIM(Errors));/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ОшибкиОперации", Errors, "Ошибки" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ТекстыОшибок", ОшибкиОперации.Ошибки );/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ТекстыОшибок.Text;/##CHR(13)##//##CHR(10)##/ КодОшибки = VAL(ТекстыОшибок.Code);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ТекстыОшибок");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код ошибки 2 - истек срок жизни токена/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки <> 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка " + КодОшибки + " при снятии отчета. Описание: " + ОписаниеОшибки, "Ошибка " + КодОшибки);/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КодОшибки == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN КодОшибки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные сервера WEBKASSA");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в случае отсутсвия ошибок вернем возвращаемый текст/##CHR(13)##//##CHR(10)##/ RETURN Data;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Данная операция не проихводится в демо-режиме");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СООБЩЕНИЕ("Вы действительно хотите произвести снятие отчета?", "X-отчет", 4) == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Результат = ОтправитьЗапросXОтчет();/##CHR(13)##//##CHR(10)##///если вернулся ответ false, значить произошла ошибка отправки запроса/##CHR(13)##//##CHR(10)##/IF (Результат == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если вернулся ответ равный 2, то значит токен истек, требуется новый/##CHR(13)##//##CHR(10)##/IF ( Результат == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ОтправитьЗапросXОтчет(); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (Результат <> 2 AND Результат <> false AND !ПУСТО(Результат) AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеОтвета", Результат, "dat" );/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = 0;/##CHR(13)##//##CHR(10)##/ НомерОтчета = VAL(ДанныеОтвета.ReportNumber);/##CHR(13)##//##CHR(10)##/ НаименованиеЮЛ = ALLTRIM( STRTRANC( ДанныеОтвета.TaxPayerName, "\""", """") );/##CHR(13)##//##CHR(10)##/ ИНН = ДанныеОтвета.TaxPayerIn;/##CHR(13)##//##CHR(10)##/ ПлательщикНДС = ДанныеОтвета.TaxPayerVAT;/##CHR(13)##//##CHR(10)##/ СерияСвНДС = ДанныеОтвета.TaxPayerVATSeria;/##CHR(13)##//##CHR(10)##/ НомерСвНДС = ДанныеОтвета.TaxPayerVATNumber;/##CHR(13)##//##CHR(10)##/ СНКассы = ДанныеОтвета.CashBoxSN;/##CHR(13)##//##CHR(10)##/ ИНКассы = ДанныеОтвета.CashBoxIN;/##CHR(13)##//##CHR(10)##/ РНКассы = ДанныеОтвета.CashBoxRN;/##CHR(13)##//##CHR(10)##/ ДатаНачалаСмены = ДанныеОтвета.StartOn;/##CHR(13)##//##CHR(10)##/ ДатаОтчета = ДанныеОтвета.ReportOn;/##CHR(13)##//##CHR(10)##/ КодКассира = ДанныеОтвета.CashierCode;/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL(ДанныеОтвета.ShiftNumber);/##CHR(13)##//##CHR(10)##/ КоличествоДок = VAL(ДанныеОтвета.DocumentCount);/##CHR(13)##//##CHR(10)##/ СуммаВнесений = VAL(ДанныеОтвета.PutMoneySum);/##CHR(13)##//##CHR(10)##/ СуммаВыплат = VAL(ДанныеОтвета.TakeMoneySum);/##CHR(13)##//##CHR(10)##/ КонтрольнаяСумма= VAL(ДанныеОтвета.ControlSum);/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДанныеОтвета.OfflineMode;/##CHR(13)##//##CHR(10)##/ СуммаНаличных = VAL(ДанныеОтвета.SumInCashbox);/##CHR(13)##//##CHR(10)##/ Продажи = ДанныеОтвета.Sell;/##CHR(13)##//##CHR(10)##/ Покупки = ДанныеОтвета.Buy;/##CHR(13)##//##CHR(10)##/ ВозвратыПродаж = ДанныеОтвета.ReturnSell;/##CHR(13)##//##CHR(10)##/ ВозвратыПокупок = ДанныеОтвета.ReturnBuy;/##CHR(13)##//##CHR(10)##/ НеобнуляемыеСуммыНС = ДанныеОтвета.StartNonNullable;/##CHR(13)##//##CHR(10)##/ НеобнуляемыеСуммыКС = ДанныеОтвета.EndNonNullable;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печатаем информацию на ФР/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/ Driver.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/ Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/ Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##/ Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/ Driver.Connected = true;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[0] = "Наличные";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[1] = "Банк. карта";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[2] = "Оплата в кредит";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[3] = "Оплата тарой";/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияКоличество = 0;/##CHR(13)##//##CHR(10)##/ НачальнаяПрозицияДляЦифры = 0;/##CHR(13)##//##CHR(10)##/ //1. Вывод наименования ЮЛ по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(НаименованиеЮЛ,"C","","","");/##CHR(13)##//##CHR(10)##/ //2. ИНН/БИН по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНН\БИН " + ИНН,"C","","","");/##CHR(13)##//##CHR(10)##/ //3. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //4. Вывод названия отчета по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(НаименованиеОтчета,"C","","","");/##CHR(13)##//##CHR(10)##/ //5. Вывод даты и времени отчета по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(ДатаОтчета,"C","","","");/##CHR(13)##//##CHR(10)##/ //6. Вывод номера отчета слева и кода кассира справа/##CHR(13)##//##CHR(10)##/ СтрокаНомерОтчета = "Номер отчета " + ALLTRIM( НомерОтчета );/##CHR(13)##//##CHR(10)##/ СтрокаНомерКассира = "Код кассира " + ALLTRIM( КодКассира );/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаНомерОтчета,"LR","",СтрокаНомерКассира,"");/##CHR(13)##//##CHR(10)##/ //7. Вывод номера смены по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Номер смены " + ALLTRIM( НомерСмены ),"C","","","");/##CHR(13)##//##CHR(10)##/ //8. Вывод продолжительности смены по центру/##CHR(13)##//##CHR(10)##/ СтрокаПродолжительностиСмены = ALLTRIM(ДатаНачалаСмены) + "-" + ALLTRIM(ДАТА());/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаПродолжительностиСмены,"C","","","");/##CHR(13)##//##CHR(10)##/ //9. Вывод строки с количеством и суммой/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC","Количество","Сумма","");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //рассчитаем центральную позицию для Количества, чтобы далее в одинаковой позиции выводить итоговые количества по видам операций/##CHR(13)##//##CHR(10)##/ //здесь ДлинаСтрокиПечати = 1, ДлинаСтрокиПечатиЦ = 10, ДлинаСтрокиПечатиП = 5. Общая их длина = 16 /##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - 16;/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияКоличество = INT(ДлинаСтрокиПробелов/2) + 2; //количество пробелов + 1 пробел + печать только со следующей позиции./##CHR(13)##//##CHR(10)##/ НачальнаяПрозицияДляЦифры = НачальнаяПозицияКоличество + 8; //начиная с какой позиции печатаем цифру с количеством/##CHR(13)##//##CHR(10)##/ //учитываем что порядковый номер последнего символа слова "Количество" равняется 10, то нам нужно начинать печатать с 9 символа и сделать поправку на то,/##CHR(13)##//##CHR(10)##/ //что смещение происходит за счет добавления пробелов/##CHR(13)##//##CHR(10)##/ //Для получения одинакового положения цифры на чековой ленте, при передаче НачальнаяПрозицияДляЦифры будем делать поправку на длину строки печатаемой слева/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //10. Вывод наименование необнуляемой суммы на начало/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НЕОБНУЛ. СУММА НА НАЧАЛО СМЕНЫ","L","","","");/##CHR(13)##//##CHR(10)##/ //чтение структуры необнуляемых сумм на начало смены/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("НеобСуммыНСДанные", НеобнуляемыеСуммыНС);/##CHR(13)##//##CHR(10)##/ //11. Вывод необнуляемых сумм на начало смены/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыНСДанные.Sell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыНСДанные.Buy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыНСДанные.ReturnSell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыНСДанные.ReturnBuy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НеобСуммыНСДанные");/##CHR(13)##//##CHR(10)##/ //12. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //Данные по закрываемой смене/##CHR(13)##//##CHR(10)##/ //13. SELL - Продажи/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ПродажиПоСмене", Продажи);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ПродажиПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ПродажиПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ПродажиПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ПродажиПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ПродажиПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ПродажиПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ПродажиПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Продажа";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати,"LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ПродажиПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Получено","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПродажиПоСмене");/##CHR(13)##//##CHR(10)##/ //14. Buy - Покупки/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ПокупкиПоСмене", Покупки);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ПокупкиПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ПокупкиПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ПокупкиПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ПокупкиПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ПокупкиПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ПокупкиПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ПокупкиПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Покупка";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ПокупкиПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Выдано","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПокупкиПоСмене");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //15. ReturnSell - Возвраты продаж/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ВозвратыПродажПоСмене", ВозвратыПродаж);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ВозвратыПродажПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ВозвратыПродажПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ВозвратыПродажПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ВозвратыПродажПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ВозвратыПродажПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ВозвратыПродажПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ВозвратыПродажПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Возвратов Продаж";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати) );/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ВозвратыПродажПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Выдано","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ВозвратыПродажПоСмене");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //16. ReturnBuy - Возвраты покупок/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ВозвратыПокупокПоСмене", ВозвратыПокупок);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ВозвратыПокупокПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ВозвратыПокупокПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ВозвратыПокупокПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ВозвратыПокупокПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ВозвратыПокупокПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ВозвратыПокупокПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ВозвратыПокупокПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Возвратов Покупок";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ВозвратыПокупокПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Получено","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ВозвратыПродажПоСмене");/##CHR(13)##//##CHR(10)##/ //17. Внесение/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Внесение","LR","",ALLTRIM( STR( СуммаВнесений, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //18. Выплата/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Изъятие","LR","",ALLTRIM( STR( СуммаВыплат, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //19. Наличных в кассе/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НАЛИЧНЫЕ В КАССЕ","LR","",ALLTRIM( STR( СуммаНаличных, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //20. Вывод наименование необнуляемой суммы на конец/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НЕОБНУЛ. СУММА ЗА ТЕКУЩУЮ СМЕНУ","L","","","");/##CHR(13)##//##CHR(10)##/ //чтение структуры необнуляемых сумм на конец смены/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("НеобСуммыКСДанные", НеобнуляемыеСуммыКС);/##CHR(13)##//##CHR(10)##/ //21. Вывод необнуляемых сумм на конец смены/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.Sell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.Buy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.ReturnSell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.ReturnBuy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НеобСуммыКСДанные");/##CHR(13)##//##CHR(10)##/ //22. Количество док. за смену/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Количество документов за смену ", "LR", "", ALLTRIM( STR( КоличествоДок ) ) ,"");/##CHR(13)##//##CHR(10)##/ //23. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //24. ИНК (ИНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНК: " + ИНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //25. РНК (РНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("РНК: " + РНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //26. ЗНК (СНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ЗНК: " + СНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //27. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //28. WEBKASSA/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("WEBKASSA.KZ","C","","","");/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ Driver.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ Driver.CutCheck();/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Неожиданный ответ от сервиса WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОтправитьЗапросВнесение()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, false );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СНВебКассы = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Текст запроса json/##CHR(13)##//##CHR(10)##/ ТелоЗапроса = /##CHR(13)##//##CHR(10)##/ "{/##CHR(13)##//##CHR(10)##/ ""Token"":""" + ТокенВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""CashboxUniqueNumber"":""" + СНВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""OperationType"": 0,/##CHR(13)##//##CHR(10)##/ ""Sum"":" + STR( Сумма, 10, 2) + ",/##CHR(13)##//##CHR(10)##/ ""ExternalCheckNumber"":""" + НомерЧека + """/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Соединение с сервисом WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/MoneyOperation";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, МАССИВИЗСТРОКИ( ПЕРЕКОДИРОВАТЬ( ТелоЗапроса, "ANSI", "UTF-8" ) ), "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ Data = "";/##CHR(13)##//##CHR(10)##/ Errors = "";/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = false;/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "";/##CHR(13)##//##CHR(10)##/ КодОшибки = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Errors))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Errors:" + ALLTRIM(Errors));/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ОшибкиОперации", Errors, "Ошибки" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ТекстыОшибок", ОшибкиОперации.Ошибки );/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ТекстыОшибок.Text;/##CHR(13)##//##CHR(10)##/ КодОшибки = VAL(ТекстыОшибок.Code);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ТекстыОшибок");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код ошибки 2 - истек срок жизни токена/##CHR(13)##//##CHR(10)##/ IF (КодОшибки == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN КодОшибки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка " + КодОшибки + " при внесении денег. Описание: " + ОписаниеОшибки, "Ошибка " + КодОшибки);/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные сервера WEBKASSA");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ //в случае отсутсвия ошибок вернем возвращаемый текст/##CHR(13)##//##CHR(10)##/ RETURN Data;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Данная операция не проихводится в демо-режиме");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = ОтправитьЗапросВнесение();/##CHR(13)##//##CHR(10)##///если вернулся ответ false, значить произошла ошибка отправки запроса/##CHR(13)##//##CHR(10)##/IF (Результат == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если вернулся ответ равный 2, то значит токен истек, требуется новый/##CHR(13)##//##CHR(10)##/IF ( Результат == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ОтправитьЗапросВнесение(); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (Результат <> 2 AND Результат <> false AND !ПУСТО(Результат) AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеОтвета", Результат, "dat" );/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДанныеОтвета.OfflineMode;/##CHR(13)##//##CHR(10)##/ КассаАвтономно = ДанныеОтвета.CashboxOfflineMode;/##CHR(13)##//##CHR(10)##/ ДатаВремяОперации = ДанныеОтвета.DateTime;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаВКассе = VAL(ДанныеОтвета.Sum);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма в кассе = "+ТекущаяСуммаВКассе);/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеКассы", ДанныеОтвета.Cashbox );/##CHR(13)##//##CHR(10)##/ ЗНК = ДанныеКассы.UniqueNumber;/##CHR(13)##//##CHR(10)##/ РНК = ДанныеКассы.RegistrationNumber;/##CHR(13)##//##CHR(10)##/ ИНК = ДанныеКассы.IdentityNumber;/##CHR(13)##//##CHR(10)##/ //печатаем информацию на ФР/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Печать внесения - начало");/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/ Driver.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/ Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/ Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##/ Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.Connected == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Connect();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //1. Название операции и номер по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ВНЕСЕНИЕ № " + ALLTRIM( STR( НомерЧека ) ),"C","","","");/##CHR(13)##//##CHR(10)##/ //2. Дата и время операции слева и справа/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Дата","LR","",ALLTRIM( ДатаВремяОперации ),"");/##CHR(13)##//##CHR(10)##/ //3. Суммма и значение суммы слева и справа/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Сумма","LR","",ALLTRIM( STR( Сумма, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //4. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //5. Принаки автономности/##CHR(13)##//##CHR(10)##/ IF ( АвтономныйРежим == true OR АвтономныйРежим == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Чек сформирован в автономном режиме","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КассаАвтономно == true OR КассаАвтономно == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Касса не передает чеки в ОФД","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //6. Текущая сумма наличности в кассе/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Текущая сумма в кассе","LR","",ALLTRIM( STR( ТекущаяСуммаВКассе, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //7. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //8. ИНК (ИНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНК: " + ИНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //9. РНК (РНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("РНК: " + РНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //10. ЗНК (ЗНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ЗНК: " + ЗНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //11. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //12. WEBKASSA/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("WEBKASSA.KZ","C","","","");/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ Driver.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ Driver.CutCheck();/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Печать внесения - конец");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Неожиданный ответ от сервиса WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОтправитьЗапросВыплата()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, false );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СНВебКассы = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Текст запроса json/##CHR(13)##//##CHR(10)##/ ТелоЗапроса = /##CHR(13)##//##CHR(10)##/ "{/##CHR(13)##//##CHR(10)##/ ""Token"":""" + ТокенВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""CashboxUniqueNumber"":""" + СНВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""OperationType"": 1,/##CHR(13)##//##CHR(10)##/ ""Sum"":" + STR( Сумма, 10, 2) + ",/##CHR(13)##//##CHR(10)##/ ""ExternalCheckNumber"":""" + НомерЧека + """/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Соединение с сервисом WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/MoneyOperation";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, МАССИВИЗСТРОКИ( ПЕРЕКОДИРОВАТЬ( ТелоЗапроса, "ANSI", "UTF-8" ) ), "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ Data = "";/##CHR(13)##//##CHR(10)##/ Errors = "";/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = false;/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "";/##CHR(13)##//##CHR(10)##/ КодОшибки = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Errors))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Errors:" + ALLTRIM(Errors));/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ОшибкиОперации", Errors, "Ошибки" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ТекстыОшибок", ОшибкиОперации.Ошибки );/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ТекстыОшибок.Text;/##CHR(13)##//##CHR(10)##/ КодОшибки = VAL(ТекстыОшибок.Code);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ТекстыОшибок");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код ошибки 2 - истек срок жизни токена/##CHR(13)##//##CHR(10)##/ IF (КодОшибки == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN КодОшибки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка " + КодОшибки + " при внесении денег. Описание: " + ОписаниеОшибки, "Ошибка " + КодОшибки);/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные сервера WEBKASSA");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ //в случае отсутсвия ошибок вернем возвращаемый текст/##CHR(13)##//##CHR(10)##/ RETURN Data;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Данная операция не проихводится в демо-режиме");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = ОтправитьЗапросВыплата();/##CHR(13)##//##CHR(10)##///если вернулся ответ false, значить произошла ошибка отправки запроса/##CHR(13)##//##CHR(10)##/IF (Результат == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если вернулся ответ равный 2, то значит токен истек, требуется новый/##CHR(13)##//##CHR(10)##/IF ( Результат == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ОтправитьЗапросВыплата(); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (Результат <> 2 AND Результат <> false AND !ПУСТО(Результат) AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеОтвета", Data, "dat" );/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДанныеОтвета.OfflineMode;/##CHR(13)##//##CHR(10)##/ КассаАвтономно = ДанныеОтвета.CashboxOfflineMode;/##CHR(13)##//##CHR(10)##/ ДатаВремяОперации = ДанныеОтвета.DateTime;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаВКассе = VAL(ДанныеОтвета.Sum);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма в кассе = "+ТекущаяСуммаВКассе);/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеКассы", ДанныеОтвета.Cashbox );/##CHR(13)##//##CHR(10)##/ ЗНК = ДанныеКассы.UniqueNumber;/##CHR(13)##//##CHR(10)##/ РНК = ДанныеКассы.RegistrationNumber;/##CHR(13)##//##CHR(10)##/ ИНК = ДанныеКассы.IdentityNumber;/##CHR(13)##//##CHR(10)##/ //печатаем информацию на ФР/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/ Driver.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/ Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/ Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##/ Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.Connected == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Connect();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //1. Название операции и номер по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИЗЪЯТИЕ № " + ALLTRIM( STR( НомерЧека ) ),"C","","","");/##CHR(13)##//##CHR(10)##/ //2. Дата и время операции слева и справа/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Дата","LR","",ALLTRIM( ДатаВремяОперации ),"");/##CHR(13)##//##CHR(10)##/ //3. Суммма и значение суммы слева и справа/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Сумма","LR","",ALLTRIM( STR( Сумма, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //4. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //5. Принаки автономности/##CHR(13)##//##CHR(10)##/ IF ( АвтономныйРежим == true OR АвтономныйРежим == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Чек сформирован в автономном режиме","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КассаАвтономно == true OR КассаАвтономно == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Касса не передает чеки в ОФД","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //6. Текущая сумма наличности в кассе/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Текущая сумма в кассе","LR","",ALLTRIM( STR( ТекущаяСуммаВКассе, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //7. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //8. ИНК (ИНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНК: " + ИНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //9. РНК (РНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("РНК: " + РНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //10. ЗНК (ЗНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ЗНК: " + ЗНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //11. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //12. WEBKASSA/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("WEBKASSA.KZ","C","","","");/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ Driver.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ Driver.CutCheck();/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Неожиданный ответ от сервиса WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 0/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 100/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 100/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 0/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''06'', 0, ЕСЛИ( КодНалогаАйтида == ''05'', 0, 100 ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 0/##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 100/##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 100/##CHR(13)##//##CHR(10)##/ //01 - Без НДС 0/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''06'', 0, ЕСЛИ( КодНалогаАйтида == ''01'', 0, 100 ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 0/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = -1; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьТокенВебКассаПросто( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ Токен = "";/##CHR(13)##//##CHR(10)##/ //берем значения Логин и Пароль из карточки ТО/##CHR(13)##//##CHR(10)##/ ЛогинWebKassa = ALLTRIM( ЗАПРОС("SELECT login FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ ПарольWebKassa = ALLTRIM( ЗАПРОС("SELECT password FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/Authorize";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТелоЗапроса = "{""Login"": """ + ЛогинWebKassa + """, ""Password"": """ + ПарольWebKassa + """}";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Данные", json.Data );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Данные"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Данные.Token))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Токен = Данные.Token; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Данные");/##CHR(13)##//##CHR(10)##/ RETURN Токен;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, НуженНовыйТокен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ //берем значения Логин и Пароль из карточки ТО/##CHR(13)##//##CHR(10)##/ ЛогинWebKassa = ALLTRIM( ЗАПРОС("SELECT login FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ ПарольWebKassa = ALLTRIM( ЗАПРОС("SELECT password FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ //если данные не заполнены, то ничего не делаем/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ЛогинWebKassa) OR ПУСТО(ПарольWebKassa))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим наличие полученного ранее токена/##CHR(13)##//##CHR(10)##/ ПолучаемНовыйТокен = false;/##CHR(13)##//##CHR(10)##/ //получаем токен с датой редактирования менее суток (срок жизни токена равен 24 часам)/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'' AND DATEDIFF(day,edit_dat,GETDATE()) < 1");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО(ТокенВебКассы) OR НуженНовыйТокен == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если токен не нашли в параметрах или данные в параметрах устарели, то нужен новый токен/##CHR(13)##//##CHR(10)##/ ПолучаемНовыйТокен = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ("Соединение с https://devkkm.webkassa.kz. Проверка токена.");/##CHR(13)##//##CHR(10)##/ ////для проверки токена получим список касс/##CHR(13)##//##CHR(10)##/ //Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true);/##CHR(13)##//##CHR(10)##/ //Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ //АдресРесурса = "/api/Cashboxes";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТелоЗапроса = "{""Token"": """ + ТокенВебКассы + """}";/##CHR(13)##//##CHR(10)##/ //Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##/ //JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ //Data = "";/##CHR(13)##//##CHR(10)##/ //Errors = "";/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ //IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // //если в структуре json вернулась не пустая структура Error, то значит есть ошибки и вероятнее всего на данном этапе они из-за токена/##CHR(13)##//##CHR(10)##/ // ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ // IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ // {/##CHR(13)##//##CHR(10)##/ // ПолучаемНовыйТокен = true;/##CHR(13)##//##CHR(10)##/ // }/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // ПолучаемНовыйТокен = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ IF (ПолучаемНовыйТокен)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Соединение с https://devkkm.webkassa.kz. Получение токена.");/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = "";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/Authorize";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТелоЗапроса = "{""Login"": """ + ЛогинWebKassa + """, ""Password"": """ + ПарольWebKassa + """}";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Данные", json.Data );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Данные"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Данные.Token))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = Данные.Token;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТокенВебКассы) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьПараметр = !( ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ) );/##CHR(13)##//##CHR(10)##/ IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE param_ex SET value = ''" + ALLTRIM(ТокенВебКассы) + "'' WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + ALLTRIM(ТокенВебКассы) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Данные");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте - выводит нефискальные строки на чековой ленте с заданным в переданных параметрах положением строки/##CHR(13)##//##CHR(10)##///ПоложениеСтроки: C - Центр //обрабатывается так же вариант ошибочного указания русской буквы С/##CHR(13)##//##CHR(10)##/// L - Лево/##CHR(13)##//##CHR(10)##/// R - Право/##CHR(13)##//##CHR(10)##/// LR - Слева и справа/##CHR(13)##//##CHR(10)##/// LRC - По ширине //вариант с русской буквой С так же обрабатывается/##CHR(13)##//##CHR(10)##/// CR - По центру и правому краю (для этого варианта будем пользоваться LRC с передачей строки из одного пробела для левой строки/##CHR(13)##//##CHR(10)##///ПозицияЦентр - положение центральной строки на ленте для варианта LRC. Если равно 0 или пустое, то определяется расчетным путем. /##CHR(13)##//##CHR(10)##/// Передается в случаях, если нужно отцентровать одинаково несколько центральных строк/##CHR(13)##//##CHR(10)##///СтрокаДляПечати - печатаемая строка/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиЦ - строка, печатаемая по центру, для варианта положения строки LRC/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиП - строка, печатаемая справа, для вариантов положения строки LRC и LR/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, ПоложениеСтроки, СтрокаДляПечатиЦ, СтрокаДляПечатиП, ПозицияЦентр)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечати = LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиЦ = LEN(СтрокаДляПечатиЦ);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиП = LEN(СтрокаДляПечатиП);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = "";/##CHR(13)##//##CHR(10)##/ IF (ПоложениеСтроки == "L")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "R")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ((ПоложениеСтроки == "C") OR (ПоложениеСтроки == "С") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = INT((ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати))/2);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "LR")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", ДлинаСтрокиПробелов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( (ПоложениеСтроки == "LRC") OR (ПоложениеСтроки == "LRС") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиЦ - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ IF (ПозицияЦентр <> 0 AND !ПУСТО(ПозицияЦентр))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = ПозицияЦентр;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = INT(ДлинаСтрокиПробелов/2);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияП = ДлинаСтрокиПробелов - НачальнаяПозицияЦ;/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = REPLICATE(" ", НачальнаяПозицияЦ);/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", НачальнаяПозицияП); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.StringForPrinting = ОтступПечатиЛ + СтрокаДляПечати + ОтступПечатиЦ + СтрокаДляПечатиЦ + ОтступПечатиП + СтрокаДляПечатиП;/##CHR(13)##//##CHR(10)##/ //Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, ТокенВебКассы;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, ШИРИНАЧЕКОВОЙЛЕНТЫ, СУММАСКИДКИ, СУММАНДС, СУММАОПЛАТ, СУММАПРИНЯТОГО, СУММАРЕГИСТРАЦИИ, СУММАЧЕКА, КОЛИЧЕСТВОПОЗИЦИЙ;/##CHR(13)##//##CHR(10)##/PUBLIC ДЕМОНСТРАЦИЯВЕБКАССА, ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ, ДЕМО_ИНК, ДЕМО_РНК, ДЕМО_ЗНК, ДЕМО_КАССААВТОНОМНО, ДЕМО_АВТОНОМНАЯРАБОТА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //true или false. По умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 2;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 3;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ШИРИНАЧЕКОВОЙЛЕНТЫ = 32;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЕМО_РЕЖИМ/##CHR(13)##//##CHR(10)##/ДЕМОНСТРАЦИЯВЕБКАССА = false; //режим работы в режиме демонстрации для Вебкасса (без печати чеков на ККМ, только передача в ВебКасса)/##CHR(13)##//##CHR(10)##/ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ = true; //режим работы в режиме денонстрации печати (для настройки печати на чековой ленте)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДАННЫЕ ДЛЯ ДЕМО-ПЕЧАТИ/##CHR(13)##//##CHR(10)##/ДЕМО_ИНК = "3287";/##CHR(13)##//##CHR(10)##/ДЕМО_РНК = "010100172165";/##CHR(13)##//##CHR(10)##/ДЕМО_ЗНК = "SWK00060555";/##CHR(13)##//##CHR(10)##/ДЕМО_АВТОНОМНАЯРАБОТА = false;/##CHR(13)##//##CHR(10)##/ДЕМО_КАССААВТОНОМНО = false;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯВЕБКАССА == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Активизация ФР - начало. Индекс устройства = " + ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/Driver = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("Driver") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/Driver.LogOn = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/// Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/Driver.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = Driver.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( resultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultCodeDescription, "Ошибка " + Driver.ResultCode + " при установке связи с ККМ" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/Driver.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( Driver.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.Disconnect();/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Активизация ФР - конец");/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##/НомерСмены = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( НомерСмены == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET ecrsession= ecrsession + 1 WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ НомерСмены++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ФРКодОборудования + "''" );/##CHR(13)##//##CHR(10)##/IF ( НомерЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ НомерЧека++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьТекстЧекаВебКасса( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, false );/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СНВебКассы = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ НомерЧека = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = 2; //по умолчанию "Продажа"/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = "{""Token"": """ + ТокенВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""CashboxUniqueNumber"": """ + СНВебКассы + """,";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = VAL( КомандыЧека.checktype );/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "/##CHR(13)##//##CHR(10)##/ ""OperationType"": " + ТипЧекаККМ + ",/##CHR(13)##//##CHR(10)##/ ""Positions"":[";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( ВСЕГОСКИДКА <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаПозиции = СуммаПозиции - ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/ ВСЕГОСКИДКА = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПРАВСИМВ(ТекстЗапросаЧека, 1) == "}")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОбработанноеНаименованиеТовара = ПЕРЕКОДИРОВАТЬ( STRTRANC( ALLTRIM(КомандыЧека.name), """", "\"""), "ANSI", "UTF-8" );/##CHR(13)##//##CHR(10)##/ //ОбработанноеНаименованиеТовара = STRTRANC( ALLTRIM(КомандыЧека.name), """", "\""");/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""Count"": " + ALLTRIM( STR( КомандыЧека.quantity, 10, 3) ) + ",/##CHR(13)##//##CHR(10)##/ ""Price"": " + ALLTRIM( STR( КомандыЧека.price, 10, 2) ) + ",/##CHR(13)##//##CHR(10)##/ ""Tax"": " + ALLTRIM( STR( КомандыЧека.sumnds, 10, 2 ) ) + ",/##CHR(13)##//##CHR(10)##/ ""TaxType"": " + ALLTRIM(КомандыЧека.kodn) + ",/##CHR(13)##//##CHR(10)##/ ""PositionName"": """ + ОбработанноеНаименованиеТовара + """,/##CHR(13)##//##CHR(10)##/ ""PositionCode"": """ + ALLTRIM(КомандыЧека.code) + """,/##CHR(13)##//##CHR(10)##/ ""Discount"": " + ЕСЛИ(КомандыЧека.discountvalue > 0, ALLTRIM( STR( КомандыЧека.discountvalue, 10, 2) ), 0) + ",/##CHR(13)##//##CHR(10)##/ ""Markup"": " + ЕСЛИ(КомандыЧека.discountvalue < 0, ALLTRIM(STR( -1*КомандыЧека.discountvalue, 10, 2) ), 0) + ",/##CHR(13)##//##CHR(10)##/ ""SectionCode"": """ + ALLTRIM(КомандыЧека.department) + """,/##CHR(13)##//##CHR(10)##/ ""IsStronto"": false,/##CHR(13)##//##CHR(10)##/ ""MarkupDeleted"": false,/##CHR(13)##//##CHR(10)##/ ""DiscountDeleted"": false/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Начало оплаты" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "],"; //закрываем секцию с тэгами товарных позиций/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "/##CHR(13)##//##CHR(10)##/ ""Payments"":["; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПРАВСИМВ(ТекстЗапросаЧека, 1) == "}")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""Sum"": " + ALLTRIM( STR( ROUND( КомандыЧека.price, 2 ), 10, 2) ) + ",/##CHR(13)##//##CHR(10)##/ ""PaymentType"": " + КомандыЧека.closetype + "/##CHR(13)##//##CHR(10)##/ }"; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "],"; //закрываем секцию с тэгами оплат/##CHR(13)##//##CHR(10)##/ СДАЧА = СУММАПРИНЯТОГО - СУММАРЕГИСТРАЦИИ;/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + /##CHR(13)##//##CHR(10)##/ "/##CHR(13)##//##CHR(10)##/ ""Change"": " + ЕСЛИ(СДАЧА > 0, STR(СДАЧА,10,2), 0) + ",/##CHR(13)##//##CHR(10)##/ ""RoundType"": 0,/##CHR(13)##//##CHR(10)##/ ""ExternalCheckNumber"": """ + ALLTRIM(НомерЧека) + """";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + ",/##CHR(13)##//##CHR(10)##/ ""CustomerEmail"": """ + ALLTRIM(ПОЧТА) + """/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстЗапросаЧека = ТекстЗапросаЧека + "}";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ //Посылаем запрос с чеком/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(ТекстЗапросаЧека);/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки= "C:\Users\Public\Documents\webkassa.txt";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/Check";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, МАССИВИЗСТРОКИ( ПЕРЕКОДИРОВАТЬ( ТекстЗапросаЧека, "ANSI", "UTF-8") ), "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" ); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(JSONстрока);/##CHR(13)##//##CHR(10)##/ Data = "";/##CHR(13)##//##CHR(10)##/ Errors = "";/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = false;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "";/##CHR(13)##//##CHR(10)##/ КодОшибки = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Errors))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Errors:" + ALLTRIM(Errors));/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ОшибкиОперации", Errors, "Ошибки" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ТекстыОшибок", ОшибкиОперации.Ошибки );/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ТекстыОшибок.Text;/##CHR(13)##//##CHR(10)##/ КодОшибки = VAL(ТекстыОшибок.Code);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ТекстыОшибок");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код ошибки 2 - истек срок жизни токена/##CHR(13)##//##CHR(10)##/ IF (КодОшибки == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN КодОшибки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка " + КодОшибки + " при передаче чека. Описание: " + ОписаниеОшибки, "Ошибка " + КодОшибки);/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Data))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыОтветВебКассы + " ( WebData )/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + STDF( Data )+ "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("КомандыЧека");/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные сервера WEBKASSA");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("КомандыЧека");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерФД = "";/##CHR(13)##//##CHR(10)##/ ДатаЧека = "";/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = false;/##CHR(13)##//##CHR(10)##/ КассаАвтономно = false;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = "";/##CHR(13)##//##CHR(10)##/ НомерСмены = "";/##CHR(13)##//##CHR(10)##/ ИмяКассира = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ ЗНК = "";/##CHR(13)##//##CHR(10)##/ РНК = "";/##CHR(13)##//##CHR(10)##/ ИНК = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //получим результат ответа от вебкассы/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыОтветВебКассы , "ОтветВебКасса", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ОтветВебКасса.WebData))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеОтвета", ОтветВебКасса.WebData, "dat" );/##CHR(13)##//##CHR(10)##/ НомерФД = VAL(ДанныеОтвета.CheckNumber);/##CHR(13)##//##CHR(10)##/ ДатаЧека = ДанныеОтвета.DateTime;/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДанныеОтвета.OfflineMode;/##CHR(13)##//##CHR(10)##/ КассаАвтономно = ДанныеОтвета.CashboxOfflineMode;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ДанныеОтвета.CheckOrderNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ДанныеОтвета.ShiftNumber;/##CHR(13)##//##CHR(10)##/ ИмяКассира = ДанныеОтвета.EmployeeName;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеКассы", ДанныеОтвета.Cashbox );/##CHR(13)##//##CHR(10)##/ ЗНК = ДанныеКассы.UniqueNumber;/##CHR(13)##//##CHR(10)##/ РНК = ДанныеКассы.RegistrationNumber;/##CHR(13)##//##CHR(10)##/ ИНК = ДанныеКассы.IdentityNumber; /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКассы");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОтвета");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОтветВебКасса");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерФД = 0;/##CHR(13)##//##CHR(10)##/ ДатаЧека = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДЕМО_АВТОНОМНАЯРАБОТА;/##CHR(13)##//##CHR(10)##/ КассаАвтономно = ДЕМО_КАССААВТОНОМНО;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = 0;/##CHR(13)##//##CHR(10)##/ НомерСмены = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ ИмяКассира = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ ЗНК = ДЕМО_ЗНК;/##CHR(13)##//##CHR(10)##/ РНК = ДЕМО_РНК;/##CHR(13)##//##CHR(10)##/ ИНК = ДЕМО_ИНК; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НомерФД == 0 OR ПУСТО(НомерФД))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерФД = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" );/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = НомерФД;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в случае успешного ответа печатаем все на чеке/##CHR(13)##//##CHR(10)##/ //для этого проходим второй раз по контексту "КомандыЧека"/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО("КомандыЧека");/##CHR(13)##//##CHR(10)##/ НомерПозиции = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печатаем информацию на ФР/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/ Driver.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/ Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/ Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##/ Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/ Driver.Connected = true;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[0] = "Наличные";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[1] = "Банк. карта";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[2] = "Оплата в кредит";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[3] = "Оплата тарой";/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеЮЛ = ЗАПРОС("SELECT name FROM sprfirm WHERE code = ''" + firm + "''");/##CHR(13)##//##CHR(10)##/ ИННЮЛ = ЗАПРОС("SELECT inn FROM sprfirm WHERE code = ''" + firm + "''");/##CHR(13)##//##CHR(10)##/ //1. Вывод наименования ЮЛ по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(НаименованиеЮЛ,"C","","","");/##CHR(13)##//##CHR(10)##/ //2. ИНН/БИН по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНН\БИН " + ИННЮЛ,"C","","","");/##CHR(13)##//##CHR(10)##/ IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ВЕБКАССА_НАЗВАНИЕМАГАЗИНА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕБКАССА_НАЗВАНИЕМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ВЕБКАССА_АДРЕСРАСЧЕТОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕБКАССА_АДРЕСРАСЧЕТОВ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //1а. Название магазина/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(_ВЕБКАССА_НАЗВАНИЕМАГАЗИНА,"C","","","");/##CHR(13)##//##CHR(10)##/ //2а. Адрес расчетов/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(_ВЕБКАССА_АДРЕСРАСЧЕТОВ,"C","","","");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ //3. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //4. Вывод номера смены слева и кассира справа/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Смена "+НомерСмены,"LR","","Кассир 1","");/##CHR(13)##//##CHR(10)##/ //5. Вывод порядкового номера чека за смену/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Порядковый номер чека №" + НомерЧекаВСмене,"C","","","");/##CHR(13)##//##CHR(10)##/ МассивВидовЧека[0] = "ПОКУПКА";/##CHR(13)##//##CHR(10)##/ МассивВидовЧека[1] = "ВОЗВРАТ ПОКУПКИ";/##CHR(13)##//##CHR(10)##/ МассивВидовЧека[2] = "ПРОДАЖА";/##CHR(13)##//##CHR(10)##/ МассивВидовЧека[3] = "ВОЗВРАТ ПРОДАЖИ";/##CHR(13)##//##CHR(10)##/ //6. Вывод типа чека слева/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(МассивВидовЧека[VAL( КомандыЧека.checktype )],"L","","","");/##CHR(13)##//##CHR(10)##/ //7. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //8.вывод товарных позиций (когда КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат") /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( ВСЕГОСКИДКА <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаПозиции = СуммаПозиции - ВСЕГОСКИДКА;/##CHR(13)##//##CHR(10)##/ ВСЕГОСКИДКА = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //9. Вывод наименования товара с порядковым номером/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(ALLTRIM(НомерПозиции) + ". " + ALLTRIM(КомандыЧека.name),"L","","","");/##CHR(13)##//##CHR(10)##/ //10. Вывод количества цены и суммы/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + ALLTRIM( STR( КомандыЧека.quantity, 10, 3) ) + " х " + ALLTRIM( STR( КомандыЧека.price, 10, 2) ),"LR","", ALLTRIM( STR( КомандыЧека.summa, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //11. Вывод скидки (если есть)/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.discountvalue <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + ЕСЛИ(КомандыЧека.discountvalue > 0,"Скидка","Наценка"),"LR","", ЕСЛИ(КомандыЧека.discountvalue > 0,"-","+") + ALLTRIM( STR( КомандыЧека.discountvalue, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //12. Стоимость/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Стоимость","LR","", ALLTRIM( STR( СуммаПозиции, 10, 2) ),"");/##CHR(13)##//##CHR(10)##/ //13. Вывод частичного разделителя справа/##CHR(13)##//##CHR(10)##/ IF (НомерПозиции <> КОЛИЧЕСТВОПОЗИЦИЙ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ЦЕЛОЕ(ШИРИНАЧЕКОВОЙЛЕНТЫ*5/6));/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"R","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПозиции++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Начало оплаты" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //14. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //15. Вывод наименования вида оплаты и суммы справа и по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC", ALLTRIM(МассивТиповОплат[КомандыЧека.closetype])+":", ALLTRIM( STR( ROUND( КомандыЧека.price, 2 ), 10, 2) ), "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //16. Если есть сдача, то выведем на чеке/##CHR(13)##//##CHR(10)##/ СДАЧА = СУММАПРИНЯТОГО - СУММАРЕГИСТРАЦИИ;/##CHR(13)##//##CHR(10)##/ IF ( СДАЧА > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC", "Сдача:", ALLTRIM( STR( ROUND( СДАЧА, 2 ), 10, 2) ), ""); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //17. Вывод общей скидки/наценки справа и по центру/##CHR(13)##//##CHR(10)##/ IF ( СУММАСКИДКИ <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC", ЕСЛИ( СУММАСКИДКИ > 0, "Скидка:", "Наценка:"), ALLTRIM( STR( ROUND( СУММАСКИДКИ, 2 ), 10, 2) ), "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //18. ИТОГО/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC", "ИТОГО:", ALLTRIM( STR( ROUND( СУММАРЕГИСТРАЦИИ, 2 ), 10, 2) ), "");/##CHR(13)##//##CHR(10)##/ //19. Суммма НДС/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC", "в т.ч. НДС:", ALLTRIM( STR( ROUND( СУММАНДС, 2 ), 10, 2) ), "");/##CHR(13)##//##CHR(10)##/ //20. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //21. Фискальный признак/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Фискальный признак: " + ALLTRIM(НомерФД),"L","","","");/##CHR(13)##//##CHR(10)##/ //22. Дата время чека/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Время: " + ALLTRIM(ДатаЧека),"L","","","");/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ВЕБКАССА_ОФД" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕБКАССА_ОФД = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //22. Наименование ОФД/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Оператор фискальных данных: " + ALLTRIM(_ВЕБКАССА_ОФД),"L","","","");/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ВЕБКАССА_САЙТПРОВЕРКИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕБКАССА_САЙТПРОВЕРКИЧЕКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //23. Сайт проверки чека/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Для проверка чека зайдите на сайт " + ALLTRIM(_ВЕБКАССА_САЙТПРОВЕРКИЧЕКА),"L","","","");/##CHR(13)##//##CHR(10)##/ //24. Принаки автономности/##CHR(13)##//##CHR(10)##/ IF ( АвтономныйРежим == true OR АвтономныйРежим == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Чек сформирован в автономном режиме","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КассаАвтономно == true OR КассаАвтономно == "true" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Касса не передает чеки в ОФД","L","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //25. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //26. Признак фискального чека/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ФИСКАЛЬНЫЙ ЧЕК ФП","C","","","");/##CHR(13)##//##CHR(10)##/ //27. ИНК (ИНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНК: " + ИНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //28. РНК (РНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("РНК: " + РНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //29. ЗНК (ЗНК)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ЗНК: " + ЗНК,"C","","","");/##CHR(13)##//##CHR(10)##/ //30. WEBKASSA/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("WEBKASSA.KZ","C","","","");/##CHR(13)##//##CHR(10)##/ //пустые строки для отрезки/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","C","","","");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","C","","","");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","C","","","");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","C","","","");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","C","","","");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ Driver.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ Driver.CutCheck();/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + КодОшибки + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + ОписаниеОшибки, "Ошибка ФР" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //удаляем контекст/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временные таблицы/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыОтветВебКассы );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, ИмяТаблицыОтветВебКассы;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int, sumnds float, code char(20),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыОтветВебКассы = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС("CREATE TABLE " + ИмяТаблицыОтветВебКассы + "(WebData varchar(MAX))");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = TOTALDISCOUNT;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + ALLTRIM( Наименование ) + '' '' + CHR( 13 ) + "Код: " + ALLTRIM( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ //ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаНДСПозиции = summands;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ code, name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, sumnds )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + Код + "'', ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + STR( СуммаНДСНовая, 16, 2) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ code, name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, sumnds )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + Код + "'', ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + STR( СуммаНДСПозиции, 16, 2) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ //ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СуммаНДСПозиции = summands;/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ code, name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, sumnds )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + Код + "'', ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + STR( СуммаНДСНовая, 16, 2) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКА = ВСЕГОСКИДКА - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ code, name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, sumnds )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + Код + "'', ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + STR( СуммаНДСПозиции, 16, 2) + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ОтправитьЗапросZОтчет()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = "C:\Users\Public\Documents\webkassa_httplog.txt";/##CHR(13)##//##CHR(10)##/ НаименованиеОтчета = "Z-Отчет";/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, false );/##CHR(13)##//##CHR(10)##/ ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СНВебКассы = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Текст запроса json/##CHR(13)##//##CHR(10)##/ ТелоЗапроса = /##CHR(13)##//##CHR(10)##/ "{/##CHR(13)##//##CHR(10)##/ ""Token"":""" + ТокенВебКассы + """,/##CHR(13)##//##CHR(10)##/ ""CashboxUniqueNumber"":""" + СНВебКассы + """/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Соединение с сервисом WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/ZReport";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, МАССИВИЗСТРОКИ( ПЕРЕКОДИРОВАТЬ( ТелоЗапроса, "ANSI", "UTF-8" ) ), "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ Data = "";/##CHR(13)##//##CHR(10)##/ Errors = "";/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = false;/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("json") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьОшибки = !ПУСТО(Errors) OR ПУСТО(Data);/##CHR(13)##//##CHR(10)##/ IF (ЕстьОшибки == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "";/##CHR(13)##//##CHR(10)##/ КодОшибки = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Errors))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Errors:" + ALLTRIM(Errors));/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ОшибкиОперации", Errors, "Ошибки" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ТекстыОшибок", ОшибкиОперации.Ошибки );/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ТекстыОшибок.Text;/##CHR(13)##//##CHR(10)##/ КодОшибки = VAL(ТекстыОшибок.Code);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиОперации");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ТекстыОшибок");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код ошибки 2 - истек срок жизни токена/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки <> 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка " + КодОшибки + " при снятии отчета. Описание: " + ОписаниеОшибки, "Ошибка " + КодОшибки);/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КодОшибки == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN КодОшибки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные сервера WEBKASSA");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET ecrsession = ecrsession + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ //в случае отсутсвия ошибок вернем возвращаемый текст/##CHR(13)##//##CHR(10)##/ RETURN Data;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE sprequipment SET ecrsession = ecrsession + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Данная операция не производится в демо-режиме");/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СООБЩЕНИЕ("Вы действительно хотите произвести закрытие смены?", "Закрытие смены", 4) == 7 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = ОтправитьЗапросZОтчет();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если вернулся ответ false, значить произошла ошибка отправки запроса/##CHR(13)##//##CHR(10)##/IF (Результат == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если вернулся ответ равный 2, то значит токен истек, требуется новый/##CHR(13)##//##CHR(10)##/IF ( Результат == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ОтправитьЗапросZОтчет(); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Результат <> 2 AND Результат <> false AND !ПУСТО(Результат) AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "ДанныеОтвета", Результат, "dat" );/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = 0;/##CHR(13)##//##CHR(10)##/ НомерОтчета = VAL(ДанныеОтвета.ReportNumber);/##CHR(13)##//##CHR(10)##/ НаименованиеЮЛ = ALLTRIM( STRTRANC( ДанныеОтвета.TaxPayerName, "\""", """") );/##CHR(13)##//##CHR(10)##/ ИНН = ДанныеОтвета.TaxPayerIn;/##CHR(13)##//##CHR(10)##/ ПлательщикНДС = ДанныеОтвета.TaxPayerVAT;/##CHR(13)##//##CHR(10)##/ СерияСвНДС = ДанныеОтвета.TaxPayerVATSeria;/##CHR(13)##//##CHR(10)##/ НомерСвНДС = ДанныеОтвета.TaxPayerVATNumber;/##CHR(13)##//##CHR(10)##/ СНКассы = ДанныеОтвета.CashBoxSN;/##CHR(13)##//##CHR(10)##/ ИНКассы = ДанныеОтвета.CashBoxIN;/##CHR(13)##//##CHR(10)##/ РНКассы = ДанныеОтвета.CashBoxRN;/##CHR(13)##//##CHR(10)##/ ДатаНачалаСмены = ДанныеОтвета.StartOn;/##CHR(13)##//##CHR(10)##/ ДатаОтчета = ДанныеОтвета.ReportOn;/##CHR(13)##//##CHR(10)##/ ДатаЗакрытия = ДанныеОтвета.CloseOn;/##CHR(13)##//##CHR(10)##/ КодКассира = ДанныеОтвета.CashierCode;/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL(ДанныеОтвета.ShiftNumber);/##CHR(13)##//##CHR(10)##/ КоличествоДок = VAL(ДанныеОтвета.DocumentCount);/##CHR(13)##//##CHR(10)##/ СуммаВнесений = VAL(ДанныеОтвета.PutMoneySum);/##CHR(13)##//##CHR(10)##/ СуммаВыплат = VAL(ДанныеОтвета.TakeMoneySum);/##CHR(13)##//##CHR(10)##/ КонтрольнаяСумма= VAL(ДанныеОтвета.ControlSum);/##CHR(13)##//##CHR(10)##/ АвтономныйРежим = ДанныеОтвета.OfflineMode;/##CHR(13)##//##CHR(10)##/ СуммаНаличных = VAL(ДанныеОтвета.SumInCashbox);/##CHR(13)##//##CHR(10)##/ Продажи = ДанныеОтвета.Sell;/##CHR(13)##//##CHR(10)##/ Покупки = ДанныеОтвета.Buy;/##CHR(13)##//##CHR(10)##/ ВозвратыПродаж = ДанныеОтвета.ReturnSell;/##CHR(13)##//##CHR(10)##/ ВозвратыПокупок = ДанныеОтвета.ReturnBuy;/##CHR(13)##//##CHR(10)##/ НеобнуляемыеСуммыНС = ДанныеОтвета.StartNonNullable;/##CHR(13)##//##CHR(10)##/ НеобнуляемыеСуммыКС = ДанныеОтвета.EndNonNullable;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печатаем информацию на ФР/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ Driver.ComLogFile = "D:\irmk\logs\itida_shtrihFR.log";/##CHR(13)##//##CHR(10)##/ Driver.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ Driver.GetParamLD( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.LDTimeout = 1000;/##CHR(13)##//##CHR(10)##/ Driver.LDBaudRate = 6; //115200/##CHR(13)##//##CHR(10)##/ Driver.SetParamLD( );/##CHR(13)##//##CHR(10)##/ Driver.SetActiveLD();/##CHR(13)##//##CHR(10)##/ Driver.Connected = true;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[0] = "Наличные";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[1] = "Банк. карта";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[2] = "Оплата в кредит";/##CHR(13)##//##CHR(10)##/ МассивТиповОплат[3] = "Оплата тарой";/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияКоличество = 0;/##CHR(13)##//##CHR(10)##/ НачальнаяПрозицияДляЦифры = 0;/##CHR(13)##//##CHR(10)##/ //1. Вывод наименования ЮЛ по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(НаименованиеЮЛ,"C","","","");/##CHR(13)##//##CHR(10)##/ //2. ИНН/БИН по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНН\БИН " + ИНН,"C","","","");/##CHR(13)##//##CHR(10)##/ //3. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //4. Вывод названия отчета по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(НаименованиеОтчета,"C","","","");/##CHR(13)##//##CHR(10)##/ //5. Вывод даты и времени отчета по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(ДатаОтчета,"C","","","");/##CHR(13)##//##CHR(10)##/ //6. Вывод номера отчета слева и кода кассира справа/##CHR(13)##//##CHR(10)##/ СтрокаНомерОтчета = "Номер отчета " + ALLTRIM( НомерОтчета );/##CHR(13)##//##CHR(10)##/ СтрокаНомерКассира = "Код кассира " + ALLTRIM( КодКассира );/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаНомерОтчета,"LR","",СтрокаНомерКассира,"");/##CHR(13)##//##CHR(10)##/ //7. Вывод номера смены по центру/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Номер смены " + ALLTRIM( НомерСмены ),"C","","","");/##CHR(13)##//##CHR(10)##/ //8. Вывод продолжительности смены по центру/##CHR(13)##//##CHR(10)##/ СтрокаПродолжительностиСмены = ALLTRIM(ДатаНачалаСмены) + "-" + ALLTRIM(ДатаЗакрытия);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаПродолжительностиСмены,"C","","","");/##CHR(13)##//##CHR(10)##/ //9. Вывод строки с количеством и суммой/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" ","LRC","Количество","Сумма","");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //рассчитаем центральную позицию для Количества, чтобы далее в одинаковой позиции выводить итоговые количества по видам операций/##CHR(13)##//##CHR(10)##/ //здесь ДлинаСтрокиПечати = 1, ДлинаСтрокиПечатиЦ = 10, ДлинаСтрокиПечатиП = 5. Общая их длина = 16 /##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - 16;/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияКоличество = INT(ДлинаСтрокиПробелов/2) + 2; //количество пробелов + 1 пробел + печать только со следующей позиции./##CHR(13)##//##CHR(10)##/ НачальнаяПрозицияДляЦифры = НачальнаяПозицияКоличество + 8; //начиная с какой позиции печатаем цифру с количеством/##CHR(13)##//##CHR(10)##/ //учитываем что порядковый номер последнего символа слова "Количество" равняется 10, то нам нужно начинать печатать с 9 символа и сделать поправку на то,/##CHR(13)##//##CHR(10)##/ //что смещение происходит за счет добавления пробелов/##CHR(13)##//##CHR(10)##/ //Для получения одинакового положения цифры на чековой ленте, при передаче НачальнаяПрозицияДляЦифры будем делать поправку на длину строки печатаемой слева/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //10. Вывод наименование необнуляемой суммы на начало/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НЕОБНУЛ. СУММА НА НАЧАЛО СМЕНЫ","L","","","");/##CHR(13)##//##CHR(10)##/ //чтение структуры необнуляемых сумм на начало смены/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("НеобСуммыНСДанные", НеобнуляемыеСуммыНС);/##CHR(13)##//##CHR(10)##/ //11. Вывод необнуляемых сумм на начало смены/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Продаж","LR","",ALLTRIM( STR( VAL(НеобСуммыНСДанные.Sell), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Покупок","LR","",ALLTRIM( STR( VAL(НеобСуммыНСДанные.Buy), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Продаж","LR","",ALLTRIM( STR( VAL(НеобСуммыНСДанные.ReturnSell), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Покупок","LR","",ALLTRIM( STR( VAL(НеобСуммыНСДанные.ReturnBuy), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НеобСуммыНСДанные");/##CHR(13)##//##CHR(10)##/ //12. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //Данные по закрываемой смене/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //13. SELL - Продажи/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ПродажиПоСмене", Продажи);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ПродажиПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ПродажиПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ПродажиПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ПродажиПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ПродажиПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ПродажиПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ПродажиПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Продажа";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ПродажиПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты], "LR", "", ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Получено","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПродажиПоСмене");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //14. Buy - Покупки/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ПокупкиПоСмене", Покупки);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ПокупкиПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ПокупкиПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ПокупкиПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ПокупкиПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ПокупкиПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ПокупкиПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ПокупкиПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Покупка";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ПокупкиПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Выдано","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПокупкиПоСмене");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //15. ReturnSell - Возвраты продаж/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ВозвратыПродажПоСмене", ВозвратыПродаж);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ВозвратыПродажПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ВозвратыПродажПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ВозвратыПродажПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ВозвратыПродажПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ВозвратыПродажПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ВозвратыПродажПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ВозвратыПродажПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Возвратов Продаж";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ВозвратыПродажПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Выдано","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ВозвратыПродажПоСмене");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //16. ReturnBuy - Возвраты покупок/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ВозвратыПокупокПоСмене", ВозвратыПокупок);/##CHR(13)##//##CHR(10)##/ СуммаСкидок = VAL(ВозвратыПокупокПоСмене.Discount);/##CHR(13)##//##CHR(10)##/ СуммаНаценок = VAL(ВозвратыПокупокПоСмене.Markup);/##CHR(13)##//##CHR(10)##/ Получено = VAL(ВозвратыПокупокПоСмене.Taken);/##CHR(13)##//##CHR(10)##/ Сдача = VAL(ВозвратыПокупокПоСмене.Change);/##CHR(13)##//##CHR(10)##/ Количество = VAL(ВозвратыПокупокПоСмене.Count);/##CHR(13)##//##CHR(10)##/ ОбщееКоличество = VAL(ВозвратыПокупокПоСмене.TotalCount);/##CHR(13)##//##CHR(10)##/ СуммаНалогов = VAL(ВозвратыПокупокПоСмене.VAT);/##CHR(13)##//##CHR(10)##/ КоличествоДокументовЗаСмену = КоличествоДокументовЗаСмену + Количество;/##CHR(13)##//##CHR(10)##/ IF ( Количество <> 0 ) //печатаем детализацию, если есть операции по виду чеков/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = "Возвратов Покупок";/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, "LRC", ALLTRIM(STR(Количество)), ALLTRIM( STR( Получено - Сдача, 10, 2 ) ) , НачальнаяПрозицияДляЦифры - LEN(СтрокаДляПечати));/##CHR(13)##//##CHR(10)##/ //детализация по видам оплат/##CHR(13)##//##CHR(10)##/ МассивПоВидамОплат = ВозвратыПокупокПоСмене.PaymentsByTypesApiModel;/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СуммыОплатПоТипам", МассивПоВидамОплат, "СуммыОплат");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СуммыОплатПоТипам") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("Оплата", СуммыОплатПоТипам.СуммыОплат);/##CHR(13)##//##CHR(10)##/ ТипОплаты = VAL(Оплата.Type);/##CHR(13)##//##CHR(10)##/ СуммаОплаты = VAL(Оплата.Sum);/##CHR(13)##//##CHR(10)##/ IF (СуммаОплаты <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + МассивТиповОплат[ТипОплаты],"LR","",ALLTRIM( STR( СуммаОплаты, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Оплата");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СуммыОплатПоТипам");/##CHR(13)##//##CHR(10)##/ //остальные данные/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Получено","LR","",ALLTRIM( STR( Получено, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Скидки","LR","",ALLTRIM( STR( СуммаСкидок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "Наценка","LR","",ALLTRIM( STR( СуммаНаценок, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(" " + "НДС","LR","",ALLTRIM( STR( СуммаНалогов, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ВозвратыПродажПоСмене");/##CHR(13)##//##CHR(10)##/ //17. Внесение/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Внесение","LR","",ALLTRIM( STR( СуммаВнесений, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //18. Выплата/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Изъятие","LR","",ALLTRIM( STR( СуммаВыплат, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //19. Наличных в кассе/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НАЛИЧНЫЕ В КАССЕ","LR","",ALLTRIM( STR( СуммаНаличных, 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ //Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //20. Вывод наименование необнуляемой суммы на конец/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("НЕОБНУЛ. СУММА НА КОНЕЦ СМЕНЫ","L","","","");/##CHR(13)##//##CHR(10)##/ //чтение структуры необнуляемых сумм на конец смены/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("НеобСуммыКСДанные", НеобнуляемыеСуммыКС);/##CHR(13)##//##CHR(10)##/ //21. Вывод необнуляемых сумм на конец смены/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.Sell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.Buy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Продаж","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.ReturnSell ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Возвратов Покупок","LR","",ALLTRIM( STR( VAL( НеобСуммыКСДанные.ReturnBuy ), 10, 2) ) ,"");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НеобСуммыКСДанные");/##CHR(13)##//##CHR(10)##/ //22. Количество док. за смену/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("Количество документов за смену ","LR","",ALLTRIM( STR( КоличествоДок ) ) ,"");/##CHR(13)##//##CHR(10)##/ //23. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //24. ИНК (ИНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ИНК: " + ИНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //25. РНК (РНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("РНК: " + РНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //26. ЗНК (СНКассы)/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("ЗНК: " + СНКассы,"C","","","");/##CHR(13)##//##CHR(10)##/ //27. Вывод разделителя/##CHR(13)##//##CHR(10)##/ СтрокаРазделитель = REPLICATE("-", ШИРИНАЧЕКОВОЙЛЕНТЫ);/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте(СтрокаРазделитель,"L","","","");/##CHR(13)##//##CHR(10)##/ //28. WEBKASSA/##CHR(13)##//##CHR(10)##/ ВыводСтрокиОтчетаНаЛенте("WEBKASSA.KZ","C","","","");/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ Driver.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ Driver.CutCheck();/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Неожиданный ответ от сервиса WEBKASSA.KZ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Начало оплаты'', 0, 0)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯПЕЧАТИЧЕКОВ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = ПередатьТекстЧекаВебКасса();/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Результат 1: " + Результат);/##CHR(13)##//##CHR(10)##/ IF ( Результат <> true AND Результат == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##/ Результат = ПередатьТекстЧекаВебКасса();/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Результат 2: " + Результат);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Результат == true AND !ДЕМОНСТРАЦИЯВЕБКАССА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ЧЕК ПЕРЕДАЛИ. ПЕЧАТАЕМ.");/##CHR(13)##//##CHR(10)##/ Результат = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если печать завершилась ошибкой, то предложим повторить печать, т.к. в вебкассе чек завершился успешно/##CHR(13)##//##CHR(10)##/ IF ( Результат == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Результат == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ, но транзакция прошла в сервисе Webkassa." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Чек не напечатан на ленте.";/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать чек на чековой ленте?" + CHR(13) + "ВНИМАНИЕ! Чек будет записан в базу, т.к. успешно завершился в сервисе WEBKASSA.";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "UPDATE sprequipment SET chequeNumber= chequeNumber + 1 WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати");/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/ВыводимСообщение = false;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДОБОРУДОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ВыводимСообщение = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЛогинWebKassa = ALLTRIM( ЗАПРОС("SELECT login FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ ПарольWebKassa = ALLTRIM( ЗАПРОС("SELECT password FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ SNWebKassa = ALLTRIM( ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО(ЛогинWebKassa) OR ПУСТО(ПарольWebKassa) OR ПУСТО(SNWebKassa) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВыводимСообщение = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВыводимСообщение )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Необходимо заполнить логин, пароль и серийный номер от сервиса Webkassa.kz и записать карточку торгового оборудования." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Внимание! Идентификация кассы из личного кабинета будет происходить по серийному номеру." );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) - 1;/##CHR(13)##//##CHR(10)##/Driver = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##///WEBKASSA.ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##///deviceName = "WEBKASSA";/##CHR(13)##//##CHR(10)##///IF ( ПУСТО( ТокенВебКассы ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// RETURN deviceName;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СИСТЕМНОЕСООБЩЕНИЕ("Соединение с https://devkkm.webkassa.kz. Получение списка касс.");/##CHR(13)##//##CHR(10)##///получим список касс/##CHR(13)##//##CHR(10)##///Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true);/##CHR(13)##//##CHR(10)##///Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##///АдресРесурса = "/api/Cashboxes";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ТелоЗапроса = "{""Token"": """ + ТокенВебКассы + """}";/##CHR(13)##//##CHR(10)##///Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##///JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "Данные", json.Data );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "СписокКасс", Данные.List, "cashes" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///НомерУстройства = 1;/##CHR(13)##//##CHR(10)##///ВЫБРАТЬКОНТЕКСТ("СписокКасс");/##CHR(13)##//##CHR(10)##///WHILE (!КОНЕЦКОНТЕКСТА("СписокКасс"))/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ЗАГРУЗИТЬJSON( "Касса", СписокКасс.cashes, "cash" );/##CHR(13)##//##CHR(10)##/// ВЫБРАТЬКОНТЕКСТ("Касса");/##CHR(13)##//##CHR(10)##/// IF ( ИНДЕКСУСТРОЙСТВА == (НомерУстройства - 1) )/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// deviceName = Касса.UniqueNumber;/##CHR(13)##//##CHR(10)##/// BREAK; /##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// ВЫБРАТЬКОНТЕКСТ("СписокКасс");/##CHR(13)##//##CHR(10)##/// НомерУстройства++;/##CHR(13)##//##CHR(10)##/// ПРОПУСТИТЬ( 1,"СписокКасс");/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("Касса");/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("СписокКасс")/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("Данные");/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///RETURN deviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/Driver.LDIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.LDName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##///WEBKASSA.ПолучитьТокенВебКасса( КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ТокенВебКассы = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''WEBKASSA_TOKEN" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##///КоличествоКасс = 1;/##CHR(13)##//##CHR(10)##///IF ( ПУСТО( ТокенВебКассы ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// RETURN КоличествоКасс;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СИСТЕМНОЕСООБЩЕНИЕ("Соединение с https://devkkm.webkassa.kz. Получение количества касс.");/##CHR(13)##//##CHR(10)##///получим список касс/##CHR(13)##//##CHR(10)##///Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true);/##CHR(13)##//##CHR(10)##///Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##///АдресРесурса = "/api/Cashboxes";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ТелоЗапроса = "{""Token"": """ + ТокенВебКассы + """}";/##CHR(13)##//##CHR(10)##///Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##///JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "Данные", json.Data );/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬJSON( "СписокКасс", Данные.List, "cashes" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///КоличествоКасс = КОЛИЧЕСТВОСТРОК("СписокКасс");/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("СписокКасс");/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("Данные");/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ("json");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///RETURN КоличествоКасс;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/Driver.GetCountLD();/##CHR(13)##//##CHR(10)##/deviceCount = Driver.LDCount;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/Driver = false;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/IF (ДЕМОНСТРАЦИЯВЕБКАССА == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( TYPE("Driver") == "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (Driver.Connected == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Disconnect();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'27.10.2019 12:40:00') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ОНЛАЙН-ККТ "WEBKASSA" (Казахстан) и ФР/ПД Штрих v.3','ФР',0.00000000,'',0.00000000,306.00000000,0,'',0.00000000,'','',0,'C4F1FE53-8A97-401C-8FB3-5732E1543395',0,1,0,'27.10.2019 12:40:08') #begin #description Профиль ТСД Data Mobile v.2 #name Профиль ТСД Data Mobile v.2 #code 0000000152 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ШтрихКод + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'07.11.2019 22:01:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ //СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'07.11.2019 22:01:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Data Mobile";',0,0,1,0,'07.11.2019 22:01:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'07.11.2019 22:01:41') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2','ТСД',0.00000000,'',0.00000000,5988.00000000,0,'',0.00000000,'','',0,'C810C877-98F5-408E-8B27-EA5D620E433C',0,1,0,'07.11.2019 22:01:41') #begin #description Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.8 #name Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.8 #code 0000000176 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'26.01.2020 13:53:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "MobileSmarts Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'26.01.2020 13:53:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'26.01.2020 13:53:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Склад: " + СКЛАД + " / Код документа: " + КОДДОКУМЕНТА + " / ИД документа: " + ИДДОКУМЕНТА + " / Список документа: " + СПИСОКДОКУМЕНТОВ + " / Имя таблицы: " + _ИМЯТАБЛИЦЫ + " / Признак очистки: " + ПРИЗНАКОЧИСТКИТСД);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ PRODUCTCOLLECTION = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("PRODUCTCOLLECTION") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(PRODUCTCOLLECTION);/##CHR(13)##//##CHR(10)##/ PRODUCTCOLLECTION = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоПроизводитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing);/##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ productInCollectionID = "";/##CHR(13)##//##CHR(10)##/ productInCollection = PRODUCTCOLLECTION.FindById(КодТовара);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("productInCollection") == "O" )/##CHR(13)##//##CHR(10)##/ productInCollectionID = productInCollection.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(productInCollectionID))/##CHR(13)##//##CHR(10)##/ PRODUCTCOLLECTION.Add(product);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (PRODUCTCOLLECTION.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(PRODUCTCOLLECTION);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товаров в ТСД (" + _ERRORCODE + ")");/##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "001")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "Цена";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'26.01.2020 13:53:19') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (COM-обмен) v.1.9.8','ТСД',0.00000000,'',0.00000000,6069.00000000,0,'',0.00000000,'','',0,'DFB26789-9101-4B0B-B102-7D634D5379D1',0,1,0,'26.01.2020 13:53:27') #begin #description Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05) #name Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05) #code 0000000172 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("№ чека: " + КоличествоВходовНомерЧека + " / № смены: " + КоличествоВходовНомерСмены); /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаДляЗаписи, "ANSI", "OEM"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + Команда + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( Команда );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( Команда, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( Команда, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда + STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Проверка наличия ответа на предыдущую команду " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ ПредОтвет = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Ответ на предыдущую команду от ККМ: " + ПредОтвет + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = ""; /##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ЖдатьОтвета == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ НачальноеВремя = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 10 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND DATEDIFF( НачальноеВремя, ДАТАВРЕМЯ(), ''sec'') <= 10)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций*2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Массив: " + МАССИВИЗСТРОКИ( СтрокаКоманды ) + CHR(13) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ //ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, КоличествоВходовНомерЧека, КоличествоВходовНомерСмены;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 0;/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерЧека = 0;/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерСмены = 0;/##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("№ чека: " + КоличествоВходовНомерЧека + " / № смены: " + КоличествоВходовНомерСмены);/##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерСмены++;/##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер смены" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = НомерСмены; /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерЧека++;/##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер чека" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,306.00000000,0,'',0.00000000,'','',0,'A3F73EEB-2734-4653-96EC-E9F224A51605',0,1,0,'05.04.2020 16:11:58') #begin #description Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000178 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаДляЗаписи, "ANSI", "OEM"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + Команда + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( Команда );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( Команда, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( Команда, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда + STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Проверка наличия ответа на предыдущую команду " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредОтвет = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Ответ на предыдущую команду от ККМ: " + ПредОтвет + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ЖдатьОтвета == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ НачальноеВремя = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 10 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND DATEDIFF( НачальноеВремя, ДАТАВРЕМЯ(), ''sec'') <= 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций*2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Массив: " + МАССИВИЗСТРОКИ( СтрокаКоманды ) + CHR(13) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога, ИмяТаблицыСтрокСлипа;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерЧека = 0;/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерСмены = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерСмены++;/##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = НомерСмены;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоличествоВходовНомерЧека++;/##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ } //IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "V";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "O";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "G";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ ОтветОтрезки = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##///таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ИмяТаблицыСтрокСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'05.04.2020 16:11:58') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.1 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,6220.00000000,0,'',0.00000000,'','',0,'025F80E0-DCEA-4B5C-8ED3-EAD22102AF93',0,1,0,'05.04.2020 16:11:58') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.9.8 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.9.8 #code 0000000180 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'09.04.2020 21:12:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'09.04.2020 21:12:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "MobileSmarts Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'09.04.2020 21:12:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'09.04.2020 21:12:55') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.9.8','ТСД',0.00000000,'',0.00000000,6069.00000000,0,'',0.00000000,'','',0,'5382B031-CC5A-41A0-9069-56E877A3B317',0,1,0,'09.04.2020 21:12:59') #begin #description Профиль ТСД MobileSmarts ЕГАИС 3 (для интеграции OLE/COM) v.1.4 #name Профиль ТСД MobileSmarts ЕГАИС 3 (для интеграции OLE/COM) v.1.4 #code 0000000181 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Версия 1.0. ЕГАИС3/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC connector;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/anyway = true;/##CHR(13)##//##CHR(10)##/overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/generateFullTextSearch = false;/##CHR(13)##//##CHR(10)##/connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT == 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ОстатокЦена = "";/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Цена = ЗАПРОС( "SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ ОстатокЦена = ";" + STR( Остаток, 16, 3 ) + ";" + STR( Цена, 16, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения /##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (БлочнаяВыгрузка AND indexT > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (!БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Таблица БутылкиЕГАИС/##CHR(13)##//##CHR(10)##/ТаблицаБутылкиЕГАИС = connector.GetTableAccessor("БутылкиЕГАИС");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаБутылкиЕГАИС") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект БутылкиЕГАИС.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ТаблицаБутылкиЕГАИС.BeginUpload(true);/##CHR(13)##//##CHR(10)##/indexBottle=0;/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/rowColBottle = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColBottle") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColBottle.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );;/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ Алкокод = "";/##CHR(13)##//##CHR(10)##/ // создание строки таблицы бутылок/##CHR(13)##//##CHR(10)##/ rowBottle = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowBottle") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowBottle.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ rowBottle.SetField("АлкоПДФ",АлкоПДФ);/##CHR(13)##//##CHR(10)##/ rowBottle.SetField("Алкокод",Алкокод);/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("Коробка","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("Палета","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("ДМ","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("ЕАН","");/##CHR(13)##//##CHR(10)##/ rowBottle.SetField("КодНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("ФА","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("ФБ","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("ДатаРозлива","");/##CHR(13)##//##CHR(10)##/ //rowBottle.SetField("СкладСерия","");/##CHR(13)##//##CHR(10)##/ rowBottle.SetField("АлкоНаим",АлкоНаим);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColBottle.Add(rowBottle);/##CHR(13)##//##CHR(10)##/ indexBottle++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/IF (indexBottle > 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТаблицаБутылкиЕГАИС.Upload(rowColBottle);/##CHR(13)##//##CHR(10)##/ ТаблицаБутылкиЕГАИС.EndUpload();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаСкладов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColSklad.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##///connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ТаблицаКонтрагентов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/// Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/// создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/rowColKontr = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowColKontr.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColKontr.Add(row);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##///выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.Upload(rowColKontr);/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяДок = "";/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "";/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не заполнен номер ТТН в накладной. Загрузку необходимо производить в документ, принятый через модуль ЕГАИС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //"Отгрузка на сторону". выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ОтгрузкаЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //"Возврат поставщику". выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ИнвентаризацияЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="043") //Акт постановки на баланс ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПостановкаНаБалансЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ИмяДок))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Выгрузка данноги типа документа не поддерживается конфигурацией");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ //document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ document.SetField("РежимРаботы", 2); //2 - сканируются только бутылки; 3 - сканируются только коробки; 4 - полная проверка (сканируется всё, что есть в документе)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ СкладКуда = VAL(ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда); /##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ //documentItem.SetField("Цена", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ИмяДок == "ПоступлениеЕГАИС3" )/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Цена", STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'09.04.2020 21:13:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "MobileSmarts ЕГАИС 3";',0,0,1,0,'09.04.2020 21:13:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##///ООО "2х2", Вологодская область, г. Череповец/##CHR(13)##//##CHR(10)##///сайт http://www.2x2z.ru/##CHR(13)##//##CHR(10)##///email: info@2x2z.ru/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'09.04.2020 21:13:09') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Версия 1.9.0/##CHR(13)##//##CHR(10)##///Разработчик Крутиков Александр/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "";/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не заполнен номер ТТН в накладной. Загрузку необходимо производить в документ, принятый через модуль ЕГАИС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (ТипДокумента == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ОтгрузкаЕГАИС3";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС3";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ИнвентаризацияЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="043") //Акт постановки на баланс ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ПостановкаНаБалансЕГАИС3";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##/IF (КолВоДок==0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (docType == "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = "";/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document)>=0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы, соответствующие типу """+docType+""":"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''MS_ВЫБОРДОКУМЕНТОВ''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ""; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L") АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L") АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/// try/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/// catch()/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// Цена = 0.00;/##CHR(13)##//##CHR(10)##/// СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/// }/##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК") //если сканировали через Сбор Штрихкодов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'09.04.2020 21:13:09') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts ЕГАИС 3 (для интеграции OLE/COM) v.1.4','ТСД',0.00000000,'',0.00000000,1191.00000000,0,'',0.00000000,'','',0,'7B7F8F55-703E-4922-AB8B-29ACD53219D2',0,1,0,'09.04.2020 21:13:12') #begin #description Обмен данными между Айтида и Эвотор v.3.9.1 #name Обмен данными между Айтида и Эвотор v.3.9.1 #code 0000000186 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = _ЭВОТОР_ПИВОКАКТОВАР;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = ВЫЧИСЛИТЬ("_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = _ЭВОТОР_ВСКРЫТИЕТАРЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ") == "U" )/##CHR(13)##//##CHR(10)##/_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_АЛКОГОЛЬКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_АЛКОГОЛЬКАКТОВАР" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = _ЭВОТОР_АЛКОГОЛЬКАКТОВАР;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = ВЫЧИСЛИТЬ("_ЭВОТОР_АЛКОГОЛЬКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ПИВОБЕЗАЛКОКОДА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ПИВОБЕЗАЛКОКОДА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = _ЭВОТОР_ПИВОБЕЗАЛКОКОДА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = ВЫЧИСЛИТЬ("_ЭВОТОР_ПИВОБЕЗАЛКОКОДА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##///ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "evotor_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = HTTPGET(Соединение, АдресРесурса, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ALLTRIM(ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')"));/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных. Проверьте соответсвие магазина в Эвотор и склада в карточке торгового оборудования";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ""; // передаем пустое тело в запросе для очистки всех товаров/##CHR(13)##//##CHR(10)##/ IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products/delete";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF (( Ответ1 <> 200 ) AND (Ответ1<>""))/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/// _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось отправить запрос на удаление всех товаров в облако Эвотор.";/##CHR(13)##//##CHR(10)##/// //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/// //RETURN false;/##CHR(13)##//##CHR(10)##/// } /##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(8),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(9),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,CHR(208),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", " "); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"°", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"™", " ");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/GENERATEUUID = false;/##CHR(13)##//##CHR(10)##/IF (f_razr == 1 AND (aspecttype == 2 OR aspecttype == 0))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres == 0 AND f_hchild == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ GENERATEUUID = true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##///СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/н++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprres WHERE code = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')");/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT guid FROM evotorrelations WHERE maincode = ''" + code + "''");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!GENERATEUUID)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO evotorrelations (maincode, guid)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + code + "'', ''" + uuid + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code ); //код/##CHR(13)##//##CHR(10)##/barCodes[0] = ALLTRIM( barcode ); //массив штрихкодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/_ЕСТЬТИПМАРКИРОВКИ = VAL( ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END") );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname,/##CHR(13)##//##CHR(10)##/ dbo.fn_getalcocodes(''" + code + "'') as alcocodes, sprres.nnvid AS nnvid, /##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc AS a_proc, sprres.ed AS ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark, " + ЕСЛИ(_ЕСТЬТИПМАРКИРОВКИ==1, "sprres.markgroup", "0") + " AS markgroup /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ТоварИнфо.markgroup;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВСКРЫТИЕТАРЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = XMLTRANS( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ) );/##CHR(13)##//##CHR(10)##/mNameVT = XMLTRANS( ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/mCname = XMLTRANS( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ) ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCnameVT = XMLTRANS( ALLTRIM( cname ) ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = ТоварИнфо.d_litr;/##CHR(13)##//##CHR(10)##/mAProc = ТоварИнфо.a_proc;/##CHR(13)##//##CHR(10)##/alcoCodes[0] = alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ПИВОКАКТОВАР AND ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ mNNVid = "";/##CHR(13)##//##CHR(10)##/ mAProc = "";/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_АЛКОГОЛЬКАКТОВАР AND mAlco)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ mNNVid = "";/##CHR(13)##//##CHR(10)##/ mAProc = "";/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ПИВОБЕЗАЛКОКОДА == true)/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "SERVICE";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TOBACCO_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 1520 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "SHOES_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "MEDICINE_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9998 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "LIGHT_INDUSTRY_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9997 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TYRES_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9996 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "PHOTOS_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9995 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "PERFUME_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9994 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TOBACCO_PRODUCTS_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL_NOT_MARKED", ЕСЛИ(mAlco AND !РазливнойАлко,"ALCOHOL_MARKED","NORMAL")); //тип товара/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/price = ALLTRIM( STR( cena, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/priceVT = 0;/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ priceVT = ALLTRIM( STR( cena * mVolume, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/quantity = ALLTRIM( STR( kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/quantityVT = 0;/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ quantityVT = ALLTRIM( STR( kolp / mVolume, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/measureName = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = mEdn; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = "шт";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fractqty)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ measureName = "кг"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT ntype FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + kodn + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( КодНалогаККМ )], "NO_VAT"); //налоги/##CHR(13)##//##CHR(10)##/allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/description = mCname; //описание товара/##CHR(13)##//##CHR(10)##/articleNumber = XMLTRANS ( ALLTRIM(article) ); //артикул/##CHR(13)##//##CHR(10)##/parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/group = "false"; //является ли группой/##CHR(13)##//##CHR(10)##/alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/IF (н > 1) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##///тэги/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",mCode,",",true);/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(alcoCodes[0]) AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",mName,",",true); /##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/IF (_type <> "SERVICE")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( articleNumber ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/IF (mAlco AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##///IF (н < КоличествоЭлементов)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##/IF (РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT guid FROM EvotorRelations WHERE maincode=''"+STDF(mCode)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(_ТоварУИД))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO EvotorRelations (maincode, guid) VALUES (''"+STDF(code)+"'',''"+STDF(_ТоварУИД)+"'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{";/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",_ТоварУИД,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",STR( VAL( mCode ) + 90000000 ),",",true);/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(barCodes[0]) AND _ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",mNameVT,",",true); /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",priceVT,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantityVT,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName","шт",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell","false",",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description","для вскрытия тары",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type","ALCOHOL_MARKED","",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'СтрокаТоваров = СтрокаТоваров + "]"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "]");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "Content-Encoding:gzip";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Заголовки[] = "Content-Length:"+ФАЙЛРАЗМЕР(ДескрипторФайла);/##CHR(13)##//##CHR(10)##///Заголовки[] = "Accept: application/json";/##CHR(13)##//##CHR(10)##///Заголовки[] = "Charset:UTF-8";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Соединение = HTTPСоединить( "https://api.evotor.ru" );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в облако Эвотор");/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с облаком Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в облако Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/Соединение = false;/##CHR(13)##//##CHR(10)##///IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS code, '''' AS reason, '''' AS subject, '''' AS value SET FMTONLY OFF","Ошибки");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("Ошибки","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("Ошибки" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##/СтрокаОшибок = "";/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Ошибки" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ALLTRIM(Ошибки.code);/##CHR(13)##//##CHR(10)##/ ПричинаОшибки = ALLTRIM(Ошибки.reason);/##CHR(13)##//##CHR(10)##/ ОбъектОшибки = ALLTRIM(Ошибки.subject);/##CHR(13)##//##CHR(10)##/ ЗначениеОшибка = ALLTRIM(Ошибки.value);/##CHR(13)##//##CHR(10)##/ СтрокаОшибок = СтрокаОшибок + " Код ошибки: " + КодОшибки + ". Причина ошибки: " + ПричинаОшибки + ". Объект ошибки: " + ОбъектОшибки + ". Недопустимое значение: " + ЗначениеОшибка; /##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(Ответ1))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( Ответ1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаОшибок))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( СтрокаОшибок );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(8),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(9),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,CHR(208),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", " "); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"°", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"™", " ");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = КОЛИЧЕСТВОСТРОК("СписокПапок");/##CHR(13)##//##CHR(10)##/н=0;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ н++;/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ic + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ //code = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) ); //код/##CHR(13)##//##CHR(10)##/ //barCodes[0] = ""; //массив штрихкодов/##CHR(13)##//##CHR(10)##/ //alcoCodes[0] = ""; //массив алкокодов/##CHR(13)##//##CHR(10)##/ _name = LEFT( XMLTRANS( ALLTRIM( name )), 100); //наименование/##CHR(13)##//##CHR(10)##/ //price = 0; //цена продажи/##CHR(13)##//##CHR(10)##/ //quantity = 0; //остаток/##CHR(13)##//##CHR(10)##/ //costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ //measureName = ""; //наименование единицы/##CHR(13)##//##CHR(10)##/ //tax = "NO_VAT"; //ставка налога/##CHR(13)##//##CHR(10)##/ allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/ //description = ""; //описание товара/##CHR(13)##//##CHR(10)##/ //articleNumber = ""; //артикул/##CHR(13)##//##CHR(10)##/ hasVariants = "false";/##CHR(13)##//##CHR(10)##/ parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/ group = "true"; //является группой/##CHR(13)##//##CHR(10)##/ //_type = "NORMAL"; //тип товара/##CHR(13)##//##CHR(10)##/ //alcoholByVolume = 0; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ //alcoholProductKindCode = 0; //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ //tareVolume = 0; //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",code,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",_name,",",true); /##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,Разделитель,true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"hasVariants",hasVariants,",",false);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,"",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ IF (н <= КоличествоЭлементов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (RIGHT(СтрокаТоваров,1) <> ",")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'н=0; /##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(*) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "VAT_10"; //Без 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "VAT_18"; //НДС 18/20%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[7] = "VAT_0"; //НДС 0%/##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = _ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = ВЫЧИСЛИТЬ("_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = _ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = ВЫЧИСЛИТЬ("_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_in))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "evotor_in_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу+ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_in, RAT(path_in, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT(path_in, LEN(path_in)-RAT(path_in,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///запрос списка магазинов/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///запрос списка устройств/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/devices/search";/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS name, '''' AS storeUuid SET FMTONLY OFF","СписокТерминалов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокТерминалов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДТЕРМИНАЛА = СписокТерминалов.uuid;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕТЕРМИНАЛА = ALLTRIM(СписокТерминалов.name);/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНАТЕРМИНАЛА = СписокТерминалов.storeUuid;/##CHR(13)##//##CHR(10)##/ IF ((УИДМАГАЗИНАТЕРМИНАЛА == УИДМАГАЗИНА) AND (ИМЯОБОРУДОВАНИЯ == НАЗВАНИЕТЕРМИНАЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДТЕРМИНАЛА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить терминал для получения данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПЕРИОДЗАГРУЗКИ = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF (ПЕРИОДЗАГРУЗКИ == 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ datebegin = ЗАПРОС("SELECT lastdownload FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##/ dateend = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( datebegin, 7, "-" ),10) + "T" + ALLTRIM(TTOC( datebegin, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( dateend, 7, "-" ),10) + "T" + ALLTRIM(TTOC( dateend, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( КОНЕЦПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( КОНЕЦПЕРИОДА, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"", ""Все продажи, хранящиеся в ККМ"" и ""Новые продажи"" ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "";/##CHR(13)##//##CHR(10)##/ device = "?&deviceUuid="+УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"", ""Все продажи, хранящиеся в ККМ"" и ""Новые продажи"" ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ELSE/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/ //RETURN true;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Загрузка прервана.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[0] = "SELL";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[1] = "PAYBACK";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[4] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[5] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[6] = "WRITE_OFF";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[8] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[9] = "FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[10] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[14] = "ACCEPT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[15] = "RETURN";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[16] = "INVENTORY";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[17] = "REVALUATION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[18] = "OPEN_TARE";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[11] = "REGISTER_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[14] = "POSITION_TAX";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[15] = "DISCOUNT_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[35] = "DISCOUNT_DOCUMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[40] = "PAYMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[42] = "DOCUMENT_OPEN";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[45] = "DOCUMENT_CLOSE_FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[50] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[51] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[55] = "DOCUMENT_CLOSE";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[60] = "FPRINT_X_REPORT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[61] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[62] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[63] = "FPRINT_Z_REPORT";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[1] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[4] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[5] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[6] = "003";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[8] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[9] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[10] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[14] = "001";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[15] = "055";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[16] = "007";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[17] = "005";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[18] = "046";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[19] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[20] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[0] = "CASH";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[1] = "CARD";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##///MESSAGEBOX( Ответ );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/IF ( ФайлЗагрузки == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл загрузки ''" + ALLTRIM( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ(ФайлЗагрузки, JSONстрока);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 20 ) AS doctype, SPACE( 30 ) AS saletype, '''' AS docuuid, '''' AS deviceid, '''' AS type, '''' AS commodityName, CONVERT( datetime, '''' ) AS creationDate,'''' AS id, '''' AS userCode, '''' AS userUuid,/##CHR(13)##//##CHR(10)##/CONVERT(datetime, '''') AS closeDate, CONVERT(datetime, '''') AS openDate, '''' AS timezone, '''' AS openUserCode, '''' AS openUserUuid, '''' AS closeUserCode,/##CHR(13)##//##CHR(10)##/'''' AS closeUserUuid, '''' AS sessionUUID, '''' AS sessionNumber, '''' AS number, '''' AS closeResultSum, '''' AS closeSum, '''' AS sum, '''' AS storeUuid, '''' AS completeInventory,/##CHR(13)##//##CHR(10)##/'''' AS version, '''' AS baseDocumentNumber, '''' AS baseDocumentUUID, '''' AS clientName, '''' AS clientPhone, '''' AS couponNumber,/##CHR(13)##//##CHR(10)##/'''' AS alcoholByVolume, '''' AS alcoholProductKindCode, '''' AS balanceQuantity, '''' AS barcode, '''' AS commodityCode, '''' AS commodityUuid, '''' AS commodityType, /##CHR(13)##//##CHR(10)##/'''' AS costPrice, '''' AS fprintSection, '''' AS mark, '''' AS measureName,'''' AS tareVolume,'''' AS price, '''' AS quantity, '''' AS resultPrice,/##CHR(13)##//##CHR(10)##/'''' AS resultSum, '''' AS resultTaxSum, '''' AS tax, '''' AS taxPercent, '''' AS taxRateCode, '''' AS taxSum, '''' AS paymentType, '''' AS rrn, '''' AS documentNumber,/##CHR(13)##//##CHR(10)##/'''' AS receiptNumber, '''' AS proceeds,'''' AS cash,'''' AS collection, '''' AS cashIn,'''' AS cashOut, '''' AS total, '''' AS cashInQuantity, '''' AS cashOutQuantity,/##CHR(13)##//##CHR(10)##/'''' AS revenue, '''' AS sessionSalesResults, '''' AS sessionPurchasesResults, '''' AS nonzeroSumSales, '''' AS nonzeroSumPurchases, '''' AS quantitySalesQuantity,/##CHR(13)##//##CHR(10)##/'''' AS quantitySalesReversal,'''' AS quantitySalesBack, '''' AS reversalBack, '''' AS zreportNumber; SET FMTONLY OFF", "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаИнициализации = "commodityName=''''; ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DocumentTypes = "''SELL'' , ''PAYBACK'' , ''CASH_INCOME'' , ''CASH_OUTCOME'' , ''OPEN_SESSION'' , ''FPRINT'' , ''CLOSE_SESSION'' , ''INVENTORY'' , ''ACCEPT'' , ''RETURN'' , ''WRITE_OFF'' , ''REVALUATION'' , ''OPEN_TARE''";/##CHR(13)##//##CHR(10)##/TransactionTypes = "''DISCOUNT_DOCUMENT'' , ''DISCOUNT_POSITION'' , ''DISCOUNT_DOCUMENT_POSITION'' , ''DOCUMENT_OPEN'' , ''DOCUMENT_CLOSE'' , ''DOCUMENT_CLOSE_FPRINT'' , ''REGISTER_POSITION'' , ''REGISTER_BILLS'' ,/##CHR(13)##//##CHR(10)##/''CASH_INCOME'' , ''CASH_OUTCOME'' , ''INVENTORY'' , ''PAYMENT'' , ''OPEN_SESSION'' , ''CLOSE_SESSION'' , ''FPRINT_OPEN_SESSION'' , ''FPRINT_X_REPORT'' , ''FPRINT_Z_REPORT'' , ''POSITION_TAX'' , ''REVALUATION''";/##CHR(13)##//##CHR(10)##/doctype = "";/##CHR(13)##//##CHR(10)##/saletype = "";/##CHR(13)##//##CHR(10)##/docuuid = "";/##CHR(13)##//##CHR(10)##/Скрипт = "IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + DocumentTypes + " ) ) /##CHR(13)##//##CHR(10)##/ doctype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + TransactionTypes + " ) ) /##CHR(13)##//##CHR(10)##/ saletype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''uuid'' AND ЗначениеПоля <> ''null'' )/##CHR(13)##//##CHR(10)##/ docuuid = ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ ЗначениеПоля";/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad; /##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокФР" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КоличествоСтрок( "Магазины" );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##/IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции = VAL(ЗАПРОС("SELECT lasttranscount FROM sprequipment WHERE code = ''" + КодОборудования + "''"));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Магазины");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Магазины" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбщаяСумма = 0;/##CHR(13)##//##CHR(10)##/ Наличность = 0;/##CHR(13)##//##CHR(10)##/ СуммаСмены = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = 0;/##CHR(13)##//##CHR(10)##/ Инкассация = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docuuid = Магазины.docuuid;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если документ пустой - пропускаем /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docuuid ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции++;/##CHR(13)##//##CHR(10)##/ tranzCount = НомерПоследнейТранзакции; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doctype = Магазины.doctype;/##CHR(13)##//##CHR(10)##/ saletype = Магазины.saletype;/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ tranzType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 63)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСВИЕТРАНЗАКЦИЙ[i] == saletype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = STR(i); //saletype/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = Магазины.creationDate;/##CHR(13)##//##CHR(10)##/ ВременнаяЗона = VAL(Магазины.timezone);/##CHR(13)##//##CHR(10)##/ IF (!_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = ЗАПРОС("SELECT DATEADD(millisecond," + ВременнаяЗона + ", ''" + TTOC(ДАТАДОКУМЕНТА) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ tranzDate = LEFT(TTOC( ДАТАДОКУМЕНТА, 4),10);/##CHR(13)##//##CHR(10)##/ tranzTime = ALLTRIM(TTOC( ДАТАДОКУМЕНТА, 8));/##CHR(13)##//##CHR(10)##/ POSNumber = 1;//Магазины.deviceid;/##CHR(13)##//##CHR(10)##/ chequeNumber = Если(Магазины.receiptNumber=="",0,Магазины.receiptNumber);/##CHR(13)##//##CHR(10)##/ Seller = 0;//GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ commodityUuid = Магазины.commodityUuid;/##CHR(13)##//##CHR(10)##/ IF (ALLTRIM(wareCode) == "null" OR ПУСТО(wareCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ wareCode = ""; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ paymentType = Магазины.paymentType;/##CHR(13)##//##CHR(10)##/ paymentTypeInt = ЕСЛИ(paymentType=="",0,ЕСЛИ(СООТВЕТСВИЕОПЛАТ[0]==paymentType,0,1));/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = Магазины.price;/##CHR(13)##//##CHR(10)##/ Quantity = Магазины.quantity;/##CHR(13)##//##CHR(10)##/ Наличность = Магазины.cash;/##CHR(13)##//##CHR(10)##/ Инкассация = Магазины.collection;/##CHR(13)##//##CHR(10)##/ СуммаОтчет = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = Магазины.revenue;/##CHR(13)##//##CHR(10)##/ СуммаСмены = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = Магазины.closeSum;/##CHR(13)##//##CHR(10)##/ zReportNumber = Если(Магазины.zReportNumber=="",0,VAL(Магазины.zReportNumber));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 18)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСТВИЕОПЕРАЦИЙ[i] == doctype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequeType = STR(i); //doctype/##CHR(13)##//##CHR(10)##/ dockIndCode = СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[i];/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ecrSession = Магазины.sessionNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Магазины.resultPrice;/##CHR(13)##//##CHR(10)##/ SummWD = Магазины.resultSum;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = Магазины.mark;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ЕСЛИ(Магазины.barcode==''null'' OR Магазины.barcode=="","",Магазины.barcode));/##CHR(13)##//##CHR(10)##/ commodityType = Магазины.commodityType;/##CHR(13)##//##CHR(10)##/ Summ = Магазины.sum;/##CHR(13)##//##CHR(10)##/ currency = 0;/##CHR(13)##//##CHR(10)##/ education = 0;/##CHR(13)##//##CHR(10)##/ commentCode = 0;/##CHR(13)##//##CHR(10)##/ universalNDOK = Магазины.documentNumber;/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (tranztype == "40" AND paymentTypeInt == 0 AND VAL(Summ) < 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "61" AND sessionclosecount < 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sessionclosecount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закомментировано, т.к. в Эвоторе перестали заполняться номера в тэге zReportNumber /##CHR(13)##//##CHR(10)##/ //IF (tranztype == "63" AND zReportNumber == 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ // CONTINUE;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(chequeNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequeNumber = " + chequeNumber + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(universalNDOK))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ndok = ''" + universalNDOK + "'' WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ecrSession))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ecrSession = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ksnum = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF (tranzType == "61")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаСмены);/##CHR(13)##//##CHR(10)##/ kolp = 0;/##CHR(13)##//##CHR(10)##/ summa = VAL(СуммаСмены);/##CHR(13)##//##CHR(10)##/ summasale = VAL(СуммаСмены); /##CHR(13)##//##CHR(10)##/ sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranzType == "63")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ //chequeNumber = zReportNumber;/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаОтчет);/##CHR(13)##//##CHR(10)##/ kolp = VAL(Наличность);/##CHR(13)##//##CHR(10)##/ summa = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ summasale = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND paymentTypeInt == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( paymentTypeInt ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> ''18'', "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если продали маркированный табак и нет кода товара в транзакции, то попытаемся определить код по uuid а затем по штрихкоду/##CHR(13)##//##CHR(10)##/ //1. по uuid/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(warecode) AND !ПУСТО(commodityUuid) AND ALLTRIM(commodityType) == "TOBACCO_MARKED")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT maincode FROM sprres WHERE identity_column = (SELECT ic FROM spectree WHERE uniqueid = ''" + ALLTRIM( commodityUuid ) + "'')");/##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //2. по штрихкоду, если не нашли по uuid/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(warecode) AND !ПУСТО(barcode) AND ALLTRIM(commodityType) == "TOBACCO_MARKED")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( exmark ) )/##CHR(13)##//##CHR(10)##/ Штрихкод = VAL( LEFT( ALLTRIM( exmark ),14 ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Штрихкод = barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT maincode FROM sprres WHERE code = (SELECT TOP 1 nn FROM sprnnbc WHERE bc = ''" + Штрихкод + "'')");/##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !СКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "046" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (doccode <> "008")/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ else /##CHR(13)##//##CHR(10)##/ docid = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //удалим из таблицы транзакций данные по загружаемому номеру смены по выбранному оборудованию чтобы не было дублей/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND ECRSession= " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( docdate ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype = " + tranzType);/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber + " AND transtype = " + tranzType ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины")/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'22.12.2020 14:04:54') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными между Айтида и Эвотор v.3.9.1','ККМ',0.00000000,'',0.00000000,7378.00000000,0,'',0.00000000,'','',0,'47CFC0F1-D240-45F7-9B10-4C60C3455DE9',0,1,0,'22.12.2020 14:04:54') #begin #description Весы с ПЭ с режимом самообслуживания Штрих PC-200 (режим ККМ) #name Весы с ПЭ с режимом самообслуживания Штрих PC-200 (режим ККМ) #code 0000000177 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,0,0,'06.04.2021 14:16:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,0,0,'06.04.2021 14:16:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, fullpath, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column, dbo.fn_getpath_ic( ''S02'', ''0000000001'', parent, ''\'', 0) AS fullpath/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПолныйПуть = "\" + СписокПапок.fullpath;/##CHR(13)##//##CHR(10)##/ РодительПервогоУровня = ЧИСЛО(GETWORD(ПолныйПуть, "\", 2));/##CHR(13)##//##CHR(10)##/ РодительВторогоУровня = ЧИСЛО(GETWORD(ПолныйПуть, "\", 3));/##CHR(13)##//##CHR(10)##/ РодительТретьегоУровня = ЧИСЛО(GETWORD(ПолныйПуть, "\", 4));/##CHR(13)##//##CHR(10)##/ РодительЧетвертогоУровня = ЧИСЛО(GETWORD(ПолныйПуть, "\", 5));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = " '''' THEN spec.nn ELSE spec.s_code END/##CHR(13)##//##CHR(10)##/ WHERE spec.code = ''" + КодДокумента + "'' AND spec.ic = " + ИДДокумента, "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "ТоварИнфо" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATECELL", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ДобавитьСтроку" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "nn", ТоварИнфо.nn );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "s_code", ТоварИнфо.s_code );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "maincode", ТоварИнфо.maincode );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "a_code", ТоварИнфо.a_code );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "name", ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "ed", ТоварИнфо.ed );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_c", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "koef_e", 1 );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "kolp", ТоварИнфо.kolp );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena", ТоварИнфо.cena );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena_sale", ТоварИнфо.cena_sale );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "summa_sale", ТоварИнфо.cena_sale * ТоварИнфо.kolp );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "cena_wd", ТоварИнфо.cena_sale );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "summa_wd", ТоварИнфо.cena_sale * ТоварИнфо.kolp );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "maxdiscount", ТоварИнфо.maxdiscount );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "GOTOP" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ACTIVATEGRID" );/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "RECALCREGISTRATION" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _DODEFAULT = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.09.2021 17:10:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Сканер ШК для добавления в чек строк из документа','СКАНЕР',0.00000000,'',0.00000000,128.00000000,0,'',0.00000000,'','',0,'BB7F3CDB-8F2A-4AB4-B670-8D5675A002C1',0,1,0,'20.09.2021 17:10:51') #begin #description HTTP сервер (отправка файла) #name HTTP сервер (отправка файла) #code 0000000198 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1300.00000000,'//Обработка сервера/##CHR(13)##//##CHR(10)##/ИмяФайлаДляОтправки = "D:\file1";/##CHR(13)##//##CHR(10)##/Соединение = СОКЕТСОЕДИНИТЬ( __СОКЕТ );/##CHR(13)##//##CHR(10)##/Строка = СОКЕТПОЛУЧИТЬ( Соединение, CHR( 13 ) + CHR( 10 ), "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗаголовокОтвета = "HTTP/1.1 200 OK" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Content-Type: application/xml;charset=utf-8" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Content-Length: $$CONTENTLEN$$" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Cache-Control: max-age=1, must-revalidate" + CHR( 13 ) + CHR( 10 ) +/##CHR(13)##//##CHR(10)##/ "Server: Jetty(8.1.0.RC0)" + CHR( 13 ) + CHR( 10 ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ответ = ФАЙЛПРОЧИТАТЬ( ИмяФайлаДляОтправки, "S", -1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СОКЕТПЕРЕДАТЬ( Соединение, ЗАМЕНИТЬ( ЗаголовокОтвета, "$$CONTENTLEN$$", STR( LEN( Ответ ) ) ) + Ответ );/##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 10000 );/##CHR(13)##//##CHR(10)##/СОКЕТЗАКРЫТЬ( Соединение );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'16.11.2021 16:33:52') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','HTTP сервер (отправка файла)','ДСЕРВЕР',80.00000000,'',0.00000000,2611.00000000,0,'',0.00000000,'','',0,'AADB604F-44AF-464F-B3CC-6471CE66577E',0,1,0,'16.11.2021 16:33:52') #begin #description Обмен данными со Штрих-Минипос (ЕГАИС) #name Обмен данными со Штрих-Минипос (ЕГАИС) #code 0000000201 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'// ФайлЗаписатьСтроку( ДескрипторФайла, "Выгрузка условий скидок в ККМ" );/##CHR(13)##//##CHR(10)##///Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 OR cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mVtype1 = IIF( vtype == 1 OR vtype == 2, "1", "2" );/##CHR(13)##//##CHR(10)##/ mVtype2 = IIF( vtype == 1 OR vtype == 3, "1", "2" );/##CHR(13)##//##CHR(10)##/ //------ Для скидки на чек берем значения других полей/##CHR(13)##//##CHR(10)##/ IF ( mType_ == "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mSumma_min = mCsumma_min;/##CHR(13)##//##CHR(10)##/ mSumma_max = mCsumma_max;/##CHR(13)##//##CHR(10)##/-- mKolp_min = mCkolp_min;/##CHR(13)##//##CHR(10)##/-- mKolp_max = mCkolp_max;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка = "@" + mParent + ";" + mCode + ";" + mName + ";" + mVtype1 + ";" + mVtype2 + ";" +/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mCtext + ";" + mStart_date + ";" + mEnd_date + ";" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";" + mWday_min + ";" + mWday_max + ";" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";" + mSumma_min + ";" + mSumma_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для проверки наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/естьФайлы = !ПУСТО( ФайлНайти( СжатьПробелы( path_in ) ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN естьФайлы;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MessageLOG( "D:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/// Знак "!" - только для схем автоматических скидок, следовательно/##CHR(13)##//##CHR(10)##/// , необходима проверка скидки на то, что она автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// если f_condition, то скидка автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ищем в папке хотя бы одну автоматическую скидку, если не находим, пропускаем такую папку/##CHR(13)##//##CHR(10)##/ IF ( !Query( "SELECT MAX( CAST( f_condition AS int ) ) FROM " + discounts + " WHERE parent = " + ic ) ) /##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "!" + STR( ic + 10000000 ) + ";" + STDE( name, 100 ) + ";1" );/##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидками/##CHR(13)##//##CHR(10)##/// Выгружаем скидки накопительные (два первых условия) либо автоматические (третье условие)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT dsc.*/##CHR(13)##//##CHR(10)##/ , ISNULL( dsc_parent.name , '''' ) AS parentName/##CHR(13)##//##CHR(10)##/ -- , cnd.time_min, cnd.time_max, cnd.wday_min, cnd.wday_max, cnd.kolp_min, cnd.kolp_max/##CHR(13)##//##CHR(10)##/ -- , cnd.summa_min, cnd.summa_max/##CHR(13)##//##CHR(10)##/ FROM " + СКИДКИ + " dsc/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ПАПКИСКИДОК + " dsc_parent ON dsc.parent = dsc_parent.ic/##CHR(13)##//##CHR(10)##/ -- LEFT OUTER JOIN " + conditions + " cnd ON dsc.code = cnd.code/##CHR(13)##//##CHR(10)##/ WHERE dsc.client_trn_min > 0 OR dsc.client_trn_max > 0 OR dsc.f_auto = 1", "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), IIF( f_auto, 50, 100 ) );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), IIF( f_auto, 30, 100 ) );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// mType = IIF( INLIST( vtype, 1, 2 ), 1, 2 ); // тип ( 1 - скидка, 2 - надбавка )/##CHR(13)##//##CHR(10)##/// mKind = IIF( INLIST( vtype, 1, 3 ), 1, 2 ); // вид ( 1 - процентная, 2 - суммовая )/##CHR(13)##//##CHR(10)##/// mTimeMin = ALLTRIM( STRTRAN( TTOC( time_min, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mTimeMax = ALLTRIM( STRTRAN( TTOC( time_max, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mWdayMin = IIF( wday_min == 0, "", ALLTRIM( STR( wday_min, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mWdayMax = IIF( wday_max == 0, "", ALLTRIM( STR( wday_max, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mKolpMin = ALLTRIM( STR( kolp_min, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mKolpMax = ALLTRIM( STR( kolp_max, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mSummaMin = ALLTRIM( STR( summa_min, 8, 2 ) );/##CHR(13)##//##CHR(10)##/// mSummaMax = ALLTRIM( STR( summa_max, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // накопительная скидка/##CHR(13)##//##CHR(10)##/ Строка = "№" + ALLTRIM( STR( VAL( code ) ) ) + ";" + mName + ";" + mCtext + ";" + mDsc_value + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_min, 11, 2 ) ) + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_max, 11, 2 ) ) + ";;;;;" +/##CHR(13)##//##CHR(10)##/ mParent + ";" + STDE( parentName, 100 );/##CHR(13)##//##CHR(10)##/ // автоматическая скидка/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// IF ( f_auto )/##CHR(13)##//##CHR(10)##/// Строка = "@" + mParent + ";" + STDE( code, 8 ) + ";" + mName + ";" + mType + ";" + mKind + ";" /##CHR(13)##//##CHR(10)##/// + mDsc_value + ";" + mCtext + ";01.01.1753;31.12.9999;" + mTimeMin + ";" /##CHR(13)##//##CHR(10)##/// + mTimeMax + ";" + mWdayMin + ";" + mWdayMax + ";" + mKolpMin + ";" /##CHR(13)##//##CHR(10)##/// + mKolpMax + ";" + mSummaMin + ";" + mSummaMax;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT crd.*, dsc.f_condition, dsc.client_trn_min, dsc.client_trn_max, dsc.parent AS dsc_parent, dsc.f_auto/##CHR(13)##//##CHR(10)##/ FROM " + КАРТЫ + " crd/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON crd.discount = dsc.code", "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте вычисляются запросом к таблицам рабочей БД/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( Query("SELECT SUM(summa) FROM specmcard_turnover WHERE cardn=''" + cardn + "''"), 11, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество посещений расчитывается системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STDE( cardn, 24 );/##CHR(13)##//##CHR(10)##/ mName = STDE( name, 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDE( ctext, 100 );/##CHR(13)##//##CHR(10)##/ mParentAuto = "";/##CHR(13)##//##CHR(10)##/ mParentMemo = "";/##CHR(13)##//##CHR(10)##/ mDiscount = IIF( EMPTY( discount ), schem_discount, discount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Ищем скидку, соответствующую карте/##CHR(13)##//##CHR(10)##/ IF ( f_condition ) {/##CHR(13)##//##CHR(10)##/ mParentAuto = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_condition ) AND Query( "SELECT ISNULL( f_condition, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) {/##CHR(13)##//##CHR(10)##/ // Если код автоматической скидки оказался нулевым или пустым, то пробуем вычислить его на основании таблицы объектов/##CHR(13)##//##CHR(10)##/ mParentAuto = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если скидка была выгружена как накопительная, то ее родитель - код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ IF ( client_trn_min > 0 OR client_trn_max > 0 ) {/##CHR(13)##//##CHR(10)##/ mParentMemo = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная ( одна из, т.к. одна не опред. <=> обе не опред. ) была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( client_trn_min ) AND ( Query( "SELECT ISNULL( client_trn_min, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0/##CHR(13)##//##CHR(10)##/ OR Query( "SELECT ISNULL( client_trn_max, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0 ) ) {/##CHR(13)##//##CHR(10)##/ // Код накопительной скидки рассчитываем аналогично/##CHR(13)##//##CHR(10)##/ mParentMemo = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // f_auto - поле из контекста, признак того, что скидка является автоматической/##CHR(13)##//##CHR(10)##/ // ; если из контекста получить значение этого поля не удалось/##CHR(13)##//##CHR(10)##/ // , вычисляем его запросом через объекты скидок и результат подставляем в контекст/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", Query( "SELECT f_auto FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // если предыдущие попытки вычисления кода скидки были безуспешны :)/##CHR(13)##//##CHR(10)##/ // , то вычисляем на основании таблиц рабочей БД/##CHR(13)##//##CHR(10)##/ Column = IIF( Query("/##CHR(13)##//##CHR(10)##/ SELECT f_auto /##CHR(13)##//##CHR(10)##/ FROM specmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + code + "''/##CHR(13)##//##CHR(10)##/ ) ")/##CHR(13)##//##CHR(10)##/ , "mParentAuto"/##CHR(13)##//##CHR(10)##/ , "mParentMemo" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ EVALUATE("IF ( " + Column + " == '''' ) {/##CHR(13)##//##CHR(10)##/ " + Column + " = Alltrim( STR( Query( " + CHR(34) + "SELECT parent + 10000000 /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + CHR(34) + " + code + " + CHR(34) + "''/##CHR(13)##//##CHR(10)##/ )" + CHR(34) + " ) ) );/##CHR(13)##//##CHR(10)##/ }");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", IIF(Column == "mParentAuto", 1, 0));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в зависимости от значения f_auto выгружаем либо код схемы автоматических скидок/##CHR(13)##//##CHR(10)##/ // , либо код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ Строка = "%" + mCardn + ";" + mName + ";" + mCtext + ";" + mCardSaldo + ";" + IIF( f_auto, mParentAuto, "" )/##CHR(13)##//##CHR(10)##/ + ";0;0;;0;;;;" + IIF( !f_auto, mParentMemo, "" ) + ";0;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------- Формируем строку с различными командами/##CHR(13)##//##CHR(10)##///КомандыОчистки = "$$$CLR {NO_TOV}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСХЕМ ) КомандыОчистки+= "{AUT_S}";/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) КомандыОчистки+= "{DIS_C}";/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСТАВОК ) КомандыОчистки+= "{FIX_S}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, КомандыОчистки );/##CHR(13)##//##CHR(10)##/// ТЕперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( Файл( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ex_code, profile, password FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "[" + СправочникПользователей.ex_code + ";" + STDE( СправочникПользователей.name ) + ";" + STDE( СправочникПользователей.name ) );/##CHR(13)##//##CHR(10)##/ Skip( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для ШТРИХ выводим команды удаления это делается в конце файла/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CLR" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команды на добавление товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, ЕСЛИ(saldotype == 1, "$$$RPL", "$$$ADD" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Теперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_РАССЧИТЫВАТЬИТОГИЧЕКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/СкладККМ = sklad; // Сохраняем поле склад/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/currentCard = "";/##CHR(13)##//##CHR(10)##/chequeType = "0";/##CHR(13)##//##CHR(10)##/ksnum = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", 1);/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", 2);/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", 3);/##CHR(13)##//##CHR(10)##/ TranzHour = LEFT( TranzTime, 2 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", 4 );/##CHR(13)##//##CHR(10)##/ kkm = VAL( GetWord( string, ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", 6);/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", 7);/##CHR(13)##//##CHR(10)##/ wareCode = STRTRAN( STRTRAN( GetWord( string, ";", 8 ), CHR( 160 ), "" ), " ", "" );/##CHR(13)##//##CHR(10)##/ discountType = STRTRAN( GetWord( string, ";", 9 ), ",","." );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ POSNumber = "";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = Summ;/##CHR(13)##//##CHR(10)##/ ecrSession = STR( ksnum );/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ DockIndCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( kkm ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 70, 71 ) AND discountType == "3" ) // Скидка по дисконтной карте/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ currentCard = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Продажа по штриховому коду/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 24 OR VAL( tranzType ) == 55 OR VAL( tranzType ) == 40 OR VAL( tranzType ) == 67 OR VAL( tranzType ) == 64 OR VAL( tranzType ) >= 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ barcode = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ //IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + ecrNumber + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ transType = tranzType; // Чтобы не путаться везде/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Транзакции с типами 301 и более, используются для проведения нефинансовых документов/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) >= 301 AND VAL( tranzType ) <= 310 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- По типу транзакции определяем тип документа/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "301" ) docCode = "001"; //------- Приходная накладаная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "302" ) docCode = "007"; //------- Инвентаризация ТМЦ /##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "307" ) docCode = "019"; //------- Внутренее перемещение/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "308" ) docCode = "002"; //------- Расходная накладная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "310" ) docCode = "003"; //------- Списание / оприходование/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !ФайлКонецФайла( fileHandle ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( UPPER( LEFT( string, 9) ) == " 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2, 3, 13 ))");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "3" OR tranzType == "13" OR tranzType == "260" OR tranzType == "261" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "260" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "046";/##CHR(13)##//##CHR(10)##/ Quantity = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docCode = ЕСЛИ( ТИПДОКУМЕНТА == 1, "008", ЕСЛИ( ТИПДОКУМЕНТА == 2, "007", ЕСЛИ( ТИПДОКУМЕНТА == 3, "001", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТИПДОКУМЕНТА == 4, "002", ЕСЛИ( ТИПДОКУМЕНТА == 5, "003", ЕСЛИ( ТИПДОКУМЕНТА == 6, "019", "008" ) ) ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вместо кода может встречаться ШК товара/##CHR(13)##//##CHR(10)##/ IF ( ДЛИНА( wareCode ) >= 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ wareCode = ЗАПРОС( "SELECT TOP 1 maincode FROM sprres WHERE code IN /##CHR(13)##//##CHR(10)##/ (SELECT nn FROM sprnnbc WHERE bc = ''" + STDF( wareCode ) + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT barcode FROM sprres_ed WHERE barcode = ''" + STDF( wareCode ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ nn = wareCode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summa = VAL( summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ type = "000";/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ IF ( transType == "3" OR transType == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ type = "001";/##CHR(13)##//##CHR(10)##/ chequeType = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ summasale = summa;/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, /##CHR(13)##//##CHR(10)##/ s.ed_weight, s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE LTRIM(RTRIM(maincode)) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.ed_weight ), "");/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.edd_litr), "");/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "");/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, СкладККМ, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СписокФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##/// IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// date = ДАТАДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + seller + "'', ''" + warecode + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT= 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/PUBLIC SkipEvent;/##CHR(13)##//##CHR(10)##/SkipEvent = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если при выгрузке в карточке ТО не определен способ доставки и на диске найден файл-флаг/##CHR(13)##//##CHR(10)##/IF ( EMPTY( exchangeservice_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) AND !Empty( path_flag_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 20000000, 10000000 ) ) ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( name, ";", " ") ), 100 ) + "; ;;;;;;;;;;;;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + IIF( ic < 0, 20000000, 10000000 ) ) ) ) + ";0;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mBarcode = ЗАПРОС( "SELECT TOP 1 bc FROM sprnnbc WHERE nn = ''" + nn + "'' ORDER BY identity_column" ); // ALLTRIM( GETWORD( barcode, "", "", 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##///ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем макс. скидку: если -1, то -1, если 0, то 0 и т.д./##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, ALLTRIM( STR( maxdiscount, 16, 2 ) ), "0");/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Остаток/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1","" );/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM(STR(IIF(parent == 0, 0, ABS(parent) + IIF(parent < 0, 20000000, 10000000))));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + mName + ";" + mCName + ";" + mCena + ";" +/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";;" + mFlags + ";" + mKkm_section + ";" + mActionPriz + ";" + /##CHR(13)##//##CHR(10)##/ mKodn + ";"+ STDE( article, 20 ) + ";;;;" + mParent + ";1;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";" + ЕСЛИ( ПивнаяПродукция, "0", "1" ), ";" ) + ";;;;;;;" + rsubject;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/IF ( mAlco )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mNNVid + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mVolume + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mAProc + "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Сразу добавляем строки для выгрузки штриховых кодов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " WHERE code =''" + mCode + "'' AND barcode <> '''' AND barcode <> ''" + STDF( mBarcode ) + "'' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ALLTRIM( barcode ) <> mBarcode )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = "#" + mCode + ";" + STDE( barcode ) + ";" + mName + ";" + mCName + ";" + ALLTRIM( STR( cena * koef, 8, 2 ) ) + /##CHR(13)##//##CHR(10)##/ ";;;;;" + STRTRAN( ALLTRIM( koef ), ",", ".") + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим предупреждающее сообщение с вопросом "Продолжить" и вариантами Да/Нет, /##CHR(13)##//##CHR(10)##/// если было выбрано Нет, то функция вернет значение 7/##CHR(13)##//##CHR(10)##/IF ( ТипВыгрузки == ''КАРТЫ'' )/##CHR(13)##//##CHR(10)##/ IF ( MessageBox("Внимание! Выгрузка дисконтных карт, осуществленная после выгрузки схем скидок, "+/##CHR(13)##//##CHR(10)##/ "приведет к уничтожению связей между скидками и картами в файле выгрузки. "+/##CHR(13)##//##CHR(10)##/ "Вы уверены, что хотите продолжить?", "Предупреждение", 4) == 7 ) SkipEvent = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ AddMessage("Выгрузка карт была отменена пользователем.");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // обрабатываем флаги из формы обмена данными/##CHR(13)##//##CHR(10)##/ AdditionalCommands = '''';/##CHR(13)##//##CHR(10)##/ IF ( clearschemes ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{AUT_S}'';/##CHR(13)##//##CHR(10)##/ IF ( clearcards ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{DIS_C}'';/##CHR(13)##//##CHR(10)##/ IF ( clearrates ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{FIX_S}'';/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в качестве признака наличия доп. команд исполльзуем пустоту строки с ними/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" + IIF( !Empty( AdditionalCommands ), " $$$CLR {NO_TOV}" + AdditionalCommands, "" ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными со Штрих-Минипос (ЕГАИС)','ККМ',0.00000000,'',0.00000000,114.00000000,0,'',0.00000000,'','',0,'8D99B5E2-EA83-4D4B-B009-74464E95CFEF',0,1,0,'05.03.2022 10:41:23') #begin #description Обмен данными со Штрих-Минипос (ЕГАИС) (вскрытие тары) #name Обмен данными со Штрих-Минипос (ЕГАИС) (вскрытие тары) #code 0000000202 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT= 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC SkipEvent;/##CHR(13)##//##CHR(10)##/SkipEvent = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если при выгрузке в карточке ТО не определен способ доставки и на диске найден файл-флаг/##CHR(13)##//##CHR(10)##/IF ( EMPTY( exchangeservice_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) AND !Empty( path_flag_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 20000000, 10000000 ) ) ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( name, ";", " ") ), 100 ) + "; ;;;;;;;;;;;;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + IIF( ic < 0, 20000000, 10000000 ) ) ) ) + ";0;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mBarcode = ЗАПРОС( "SELECT TOP 1 bc FROM sprnnbc WHERE nn = ''" + nn + "'' ORDER BY identity_column" ); // ALLTRIM( GETWORD( barcode, "", "", 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/rsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/paytype = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##///ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем макс. скидку: если -1, то -1, если 0, то 0 и т.д./##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, ALLTRIM( STR( maxdiscount, 16, 2 ) ), "0");/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Остаток/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1","" );/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM(STR(IIF(parent == 0, 0, ABS(parent) + IIF(parent < 0, 20000000, 10000000))));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + mBarcode + ";" + mName + ";" + mCName + ";" + mCena + ";" +/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";;" + mFlags + ";" + mKkm_section + ";" + mActionPriz + ";" + /##CHR(13)##//##CHR(10)##/ mKodn + ";"+ STDE( article, 20) + ";;;;" + mParent + ";1;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";" + ЕСЛИ( ПивнаяПродукция, "0", "1" ), "" ) + ";;;;;;;" + rsubject;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/IF ( mAlco && !РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mNNVid + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mVolume + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mAProc + "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + mBarcode + ";" + mName + ";" + mCName + ";" + mCena + ";" +/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";;" + mFlags + ";" + mKkm_section + ";" + mActionPriz + ";" + /##CHR(13)##//##CHR(10)##/ mKodn + ";"+ STDE( article, 20) + ";;;;" + mParent + ";1;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( mAlco, ";" + ЕСЛИ( ПивнаяПродукция, "0", "1" ), "" ) + ";;;;;;;" + rsubject;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mNNVid + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mVolume + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mAProc + "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Сразу добавляем строки для выгрузки штриховых кодов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " WHERE code =''" + mCode + "'' AND barcode <> '''' AND barcode <> ''" + STDF( mBarcode ) + "'' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ALLTRIM( barcode ) <> mBarcode )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = "#" + mCode + ";" + STDE( barcode ) + ";" + mName + ";" + mCName + ";" + ALLTRIM( STR( cena * koef, 8, 2 ) ) + /##CHR(13)##//##CHR(10)##/ ";;;;;" + STRTRAN( ALLTRIM( koef ), ",", ".") + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для ШТРИХ выводим команды удаления это делается в конце файла/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CLR" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команды на добавление товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, ЕСЛИ(saldotype == 1, "$$$RPL", "$$$ADD" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Теперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим предупреждающее сообщение с вопросом "Продолжить" и вариантами Да/Нет, /##CHR(13)##//##CHR(10)##/// если было выбрано Нет, то функция вернет значение 7/##CHR(13)##//##CHR(10)##/IF ( ТипВыгрузки == ''КАРТЫ'' )/##CHR(13)##//##CHR(10)##/ IF ( MessageBox("Внимание! Выгрузка дисконтных карт, осуществленная после выгрузки схем скидок, "+/##CHR(13)##//##CHR(10)##/ "приведет к уничтожению связей между скидками и картами в файле выгрузки. "+/##CHR(13)##//##CHR(10)##/ "Вы уверены, что хотите продолжить?", "Предупреждение", 4) == 7 ) SkipEvent = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ AddMessage("Выгрузка карт была отменена пользователем.");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // обрабатываем флаги из формы обмена данными/##CHR(13)##//##CHR(10)##/ AdditionalCommands = '''';/##CHR(13)##//##CHR(10)##/ IF ( clearschemes ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{AUT_S}'';/##CHR(13)##//##CHR(10)##/ IF ( clearcards ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{DIS_C}'';/##CHR(13)##//##CHR(10)##/ IF ( clearrates ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{FIX_S}'';/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в качестве признака наличия доп. команд исполльзуем пустоту строки с ними/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" + IIF( !Empty( AdditionalCommands ), " $$$CLR {NO_TOV}" + AdditionalCommands, "" ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/// Знак "!" - только для схем автоматических скидок, следовательно/##CHR(13)##//##CHR(10)##/// , необходима проверка скидки на то, что она автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// если f_condition, то скидка автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ищем в папке хотя бы одну автоматическую скидку, если не находим, пропускаем такую папку/##CHR(13)##//##CHR(10)##/ IF ( !Query( "SELECT MAX( CAST( f_condition AS int ) ) FROM " + discounts + " WHERE parent = " + ic ) ) /##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "!" + STR( ic + 10000000 ) + ";" + STDE( name, 100 ) + ";1" );/##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидками/##CHR(13)##//##CHR(10)##/// Выгружаем скидки накопительные (два первых условия) либо автоматические (третье условие)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT dsc.*/##CHR(13)##//##CHR(10)##/ , ISNULL( dsc_parent.name , '''' ) AS parentName/##CHR(13)##//##CHR(10)##/ -- , cnd.time_min, cnd.time_max, cnd.wday_min, cnd.wday_max, cnd.kolp_min, cnd.kolp_max/##CHR(13)##//##CHR(10)##/ -- , cnd.summa_min, cnd.summa_max/##CHR(13)##//##CHR(10)##/ FROM " + СКИДКИ + " dsc/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ПАПКИСКИДОК + " dsc_parent ON dsc.parent = dsc_parent.ic/##CHR(13)##//##CHR(10)##/ -- LEFT OUTER JOIN " + conditions + " cnd ON dsc.code = cnd.code/##CHR(13)##//##CHR(10)##/ WHERE dsc.client_trn_min > 0 OR dsc.client_trn_max > 0 OR dsc.f_auto = 1", "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), IIF( f_auto, 50, 100 ) );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), IIF( f_auto, 30, 100 ) );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// mType = IIF( INLIST( vtype, 1, 2 ), 1, 2 ); // тип ( 1 - скидка, 2 - надбавка )/##CHR(13)##//##CHR(10)##/// mKind = IIF( INLIST( vtype, 1, 3 ), 1, 2 ); // вид ( 1 - процентная, 2 - суммовая )/##CHR(13)##//##CHR(10)##/// mTimeMin = ALLTRIM( STRTRAN( TTOC( time_min, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mTimeMax = ALLTRIM( STRTRAN( TTOC( time_max, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mWdayMin = IIF( wday_min == 0, "", ALLTRIM( STR( wday_min, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mWdayMax = IIF( wday_max == 0, "", ALLTRIM( STR( wday_max, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mKolpMin = ALLTRIM( STR( kolp_min, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mKolpMax = ALLTRIM( STR( kolp_max, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mSummaMin = ALLTRIM( STR( summa_min, 8, 2 ) );/##CHR(13)##//##CHR(10)##/// mSummaMax = ALLTRIM( STR( summa_max, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // накопительная скидка/##CHR(13)##//##CHR(10)##/ Строка = "№" + ALLTRIM( STR( VAL( code ) ) ) + ";" + mName + ";" + mCtext + ";" + mDsc_value + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_min, 11, 2 ) ) + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_max, 11, 2 ) ) + ";;;;;" +/##CHR(13)##//##CHR(10)##/ mParent + ";" + STDE( parentName, 100 );/##CHR(13)##//##CHR(10)##/ // автоматическая скидка/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// IF ( f_auto )/##CHR(13)##//##CHR(10)##/// Строка = "@" + mParent + ";" + STDE( code, 8 ) + ";" + mName + ";" + mType + ";" + mKind + ";" /##CHR(13)##//##CHR(10)##/// + mDsc_value + ";" + mCtext + ";01.01.1753;31.12.9999;" + mTimeMin + ";" /##CHR(13)##//##CHR(10)##/// + mTimeMax + ";" + mWdayMin + ";" + mWdayMax + ";" + mKolpMin + ";" /##CHR(13)##//##CHR(10)##/// + mKolpMax + ";" + mSummaMin + ";" + mSummaMax;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'// ФайлЗаписатьСтроку( ДескрипторФайла, "Выгрузка условий скидок в ККМ" );/##CHR(13)##//##CHR(10)##///Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 OR cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mVtype1 = IIF( vtype == 1 OR vtype == 2, "1", "2" );/##CHR(13)##//##CHR(10)##/ mVtype2 = IIF( vtype == 1 OR vtype == 3, "1", "2" );/##CHR(13)##//##CHR(10)##/ //------ Для скидки на чек берем значения других полей/##CHR(13)##//##CHR(10)##/ IF ( mType_ == "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mSumma_min = mCsumma_min;/##CHR(13)##//##CHR(10)##/ mSumma_max = mCsumma_max;/##CHR(13)##//##CHR(10)##/-- mKolp_min = mCkolp_min;/##CHR(13)##//##CHR(10)##/-- mKolp_max = mCkolp_max;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка = "@" + mParent + ";" + mCode + ";" + mName + ";" + mVtype1 + ";" + mVtype2 + ";" +/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mCtext + ";" + mStart_date + ";" + mEnd_date + ";" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";" + mWday_min + ";" + mWday_max + ";" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";" + mSumma_min + ";" + mSumma_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT crd.*, dsc.f_condition, dsc.client_trn_min, dsc.client_trn_max, dsc.parent AS dsc_parent, dsc.f_auto/##CHR(13)##//##CHR(10)##/ FROM " + КАРТЫ + " crd/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON crd.discount = dsc.code", "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте вычисляются запросом к таблицам рабочей БД/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( Query("SELECT SUM(summa) FROM specmcard_turnover WHERE cardn=''" + cardn + "''"), 11, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество посещений расчитывается системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STDE( cardn, 24 );/##CHR(13)##//##CHR(10)##/ mName = STDE( name, 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDE( ctext, 100 );/##CHR(13)##//##CHR(10)##/ mParentAuto = "";/##CHR(13)##//##CHR(10)##/ mParentMemo = "";/##CHR(13)##//##CHR(10)##/ mDiscount = IIF( EMPTY( discount ), schem_discount, discount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Ищем скидку, соответствующую карте/##CHR(13)##//##CHR(10)##/ IF ( f_condition ) {/##CHR(13)##//##CHR(10)##/ mParentAuto = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_condition ) AND Query( "SELECT ISNULL( f_condition, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) {/##CHR(13)##//##CHR(10)##/ // Если код автоматической скидки оказался нулевым или пустым, то пробуем вычислить его на основании таблицы объектов/##CHR(13)##//##CHR(10)##/ mParentAuto = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если скидка была выгружена как накопительная, то ее родитель - код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ IF ( client_trn_min > 0 OR client_trn_max > 0 ) {/##CHR(13)##//##CHR(10)##/ mParentMemo = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная ( одна из, т.к. одна не опред. <=> обе не опред. ) была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( client_trn_min ) AND ( Query( "SELECT ISNULL( client_trn_min, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0/##CHR(13)##//##CHR(10)##/ OR Query( "SELECT ISNULL( client_trn_max, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0 ) ) {/##CHR(13)##//##CHR(10)##/ // Код накопительной скидки рассчитываем аналогично/##CHR(13)##//##CHR(10)##/ mParentMemo = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // f_auto - поле из контекста, признак того, что скидка является автоматической/##CHR(13)##//##CHR(10)##/ // ; если из контекста получить значение этого поля не удалось/##CHR(13)##//##CHR(10)##/ // , вычисляем его запросом через объекты скидок и результат подставляем в контекст/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", Query( "SELECT f_auto FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // если предыдущие попытки вычисления кода скидки были безуспешны :)/##CHR(13)##//##CHR(10)##/ // , то вычисляем на основании таблиц рабочей БД/##CHR(13)##//##CHR(10)##/ Column = IIF( Query("/##CHR(13)##//##CHR(10)##/ SELECT f_auto /##CHR(13)##//##CHR(10)##/ FROM specmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + code + "''/##CHR(13)##//##CHR(10)##/ ) ")/##CHR(13)##//##CHR(10)##/ , "mParentAuto"/##CHR(13)##//##CHR(10)##/ , "mParentMemo" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ EVALUATE("IF ( " + Column + " == '''' ) {/##CHR(13)##//##CHR(10)##/ " + Column + " = Alltrim( STR( Query( " + CHR(34) + "SELECT parent + 10000000 /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + CHR(34) + " + code + " + CHR(34) + "''/##CHR(13)##//##CHR(10)##/ )" + CHR(34) + " ) ) );/##CHR(13)##//##CHR(10)##/ }");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", IIF(Column == "mParentAuto", 1, 0));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в зависимости от значения f_auto выгружаем либо код схемы автоматических скидок/##CHR(13)##//##CHR(10)##/ // , либо код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ Строка = "%" + mCardn + ";" + mName + ";" + mCtext + ";" + mCardSaldo + ";" + IIF( f_auto, mParentAuto, "" )/##CHR(13)##//##CHR(10)##/ + ";0;0;;0;;;;" + IIF( !f_auto, mParentMemo, "" ) + ";0;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------- Формируем строку с различными командами/##CHR(13)##//##CHR(10)##///КомандыОчистки = "$$$CLR {NO_TOV}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСХЕМ ) КомандыОчистки+= "{AUT_S}";/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) КомандыОчистки+= "{DIS_C}";/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСТАВОК ) КомандыОчистки+= "{FIX_S}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, КомандыОчистки );/##CHR(13)##//##CHR(10)##/// ТЕперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( Файл( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ex_code, profile, password FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "[" + СправочникПользователей.ex_code + ";" + STDE( СправочникПользователей.name ) + ";" + STDE( СправочникПользователей.name ) );/##CHR(13)##//##CHR(10)##/ Skip( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MessageLOG( "D:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для проверки наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/естьФайлы = !ПУСТО( ФайлНайти( СжатьПробелы( path_in ) ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN естьФайлы;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_РАССЧИТЫВАТЬИТОГИЧЕКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/СкладККМ = sklad; // Сохраняем поле склад/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/currentCard = "";/##CHR(13)##//##CHR(10)##/chequeType = "0";/##CHR(13)##//##CHR(10)##/ksnum = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", 1);/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", 2);/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", 3);/##CHR(13)##//##CHR(10)##/ TranzHour = LEFT( TranzTime, 2 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", 4 );/##CHR(13)##//##CHR(10)##/ kkm = VAL( GetWord( string, ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", 6);/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", 7);/##CHR(13)##//##CHR(10)##/ wareCode = STRTRAN( STRTRAN( GetWord( string, ";", 8 ), CHR( 160 ), "" ), " ", "" );/##CHR(13)##//##CHR(10)##/ discountType = STRTRAN( GetWord( string, ";", 9 ), ",","." );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ POSNumber = "";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = Summ;/##CHR(13)##//##CHR(10)##/ ecrSession = STR( ksnum );/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ DockIndCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( kkm ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 70, 71 ) AND discountType == "3" ) // Скидка по дисконтной карте/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ currentCard = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Продажа по штриховому коду/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 24 OR VAL( tranzType ) == 55 OR VAL( tranzType ) == 40 OR VAL( tranzType ) == 67 OR VAL( tranzType ) == 64 OR VAL( tranzType ) >= 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ barcode = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ //IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + ecrNumber + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ transType = tranzType; // Чтобы не путаться везде/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Транзакции с типами 301 и более, используются для проведения нефинансовых документов/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) >= 301 AND VAL( tranzType ) <= 310 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- По типу транзакции определяем тип документа/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "301" ) docCode = "001"; //------- Приходная накладаная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "302" ) docCode = "007"; //------- Инвентаризация ТМЦ /##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "307" ) docCode = "019"; //------- Внутренее перемещение/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "308" ) docCode = "002"; //------- Расходная накладная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "310" ) docCode = "003"; //------- Списание / оприходование/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !ФайлКонецФайла( fileHandle ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( UPPER( LEFT( string, 9) ) == " 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2, 3, 13 ))");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( tranzType, "1", "11", "2", "12", "3", "13", "260","261" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "260" OR tranzType == "261" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "046";/##CHR(13)##//##CHR(10)##/ Quantity = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docCode = ЕСЛИ( ТИПДОКУМЕНТА == 1, "008", ЕСЛИ( ТИПДОКУМЕНТА == 2, "007", ЕСЛИ( ТИПДОКУМЕНТА == 3, "001", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТИПДОКУМЕНТА == 4, "002", ЕСЛИ( ТИПДОКУМЕНТА == 5, "003", ЕСЛИ( ТИПДОКУМЕНТА == 6, "019", "008" ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вместо кода может встречаться ШК товара/##CHR(13)##//##CHR(10)##/ IF ( ДЛИНА( wareCode ) >= 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ wareCode = ЗАПРОС( "SELECT TOP 1 maincode FROM sprres WHERE code IN /##CHR(13)##//##CHR(10)##/ (SELECT nn FROM sprnnbc WHERE bc = ''" + STDF( wareCode ) + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT barcode FROM sprres_ed WHERE barcode = ''" + STDF( wareCode ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ nn = wareCode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summa = VAL( summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ type = "000";/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ IF ( transType == "3" OR transType == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ type = "001";/##CHR(13)##//##CHR(10)##/ chequeType = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ summasale = summa;/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, /##CHR(13)##//##CHR(10)##/ s.ed_weight, s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE LTRIM(RTRIM(maincode)) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.ed_weight ), "");/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.edd_litr), "");/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "");/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, СкладККМ, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СписокФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##/// IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// date = ДАТАДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + seller + "'', ''" + warecode + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'05.03.2022 10:41:23') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными со Штрих-Минипос (ЕГАИС) (вскрытие тары)','ККМ',0.00000000,'',0.00000000,165.00000000,0,'',0.00000000,'','',0,'86C189CD-CFD9-4D30-AA80-5BA66483CB93',0,1,0,'05.03.2022 10:41:23') #begin #description Система быстрых платежей #name Система быстрых платежей #code 0000000205 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##/RETURN MIN( 15000, СУММАКОПЛАТЕ );',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'// Выполнить оплату/##CHR(13)##//##CHR(10)##/QRКод = "https://qr.nspk.ru/" + ИДКлиента + "?type=01&bank=" + ИДБанка + "&sum=" + СТРОКА( СУММАКОПЛАТЕ * 100 ) + "&cur=RUB&crc=0C8A|QR код для оплаты";/##CHR(13)##//##CHR(10)##/ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ВЫВЕСТИШК", QRКод );/##CHR(13)##//##CHR(10)##/RETURN _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ;',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/RETURN СООБЩЕНИЕ( "Отмена оплаты по СБП не предусмотрена." + CHR( 13 ) + /##CHR(13)##//##CHR(10)##/ "Верните наличные денежные средства в размере " + СТРОКА( СУММАКОПЛАТЕ, 16, 2 ) + " руб." + CHR( 13 ) +/##CHR(13)##//##CHR(10)##/ "Нажмите Да, если возврат прошел успешно.", "Возврат денежных средств", 1 ) == 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "Система быстрых платежей";',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/RETURN "СБП " + КОДОБОРУДОВАНИЯ;',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'21.04.2022 9:19:11') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Система быстрых платежей','ПС',0.00000000,'Профиль формирует QR код для оплаты посредством системы быстрых платежей/##CHR(13)##//##CHR(10)##/Главному окну РМК отправляется запрос на отображение этого кода. /##CHR(13)##//##CHR(10)##/Для примера, сумма платежа ограничивается 15000 рублей.',0.00000000,231.00000000,0,'',0.00000000,'','',0,'F59C4D5B-15DB-4EE0-8B7D-E9EA79E92961',0,1,0,'21.04.2022 9:19:11') #begin #description Система быстрых платежей (Mertech) #name Система быстрых платежей (Mertech) #code 0000000206 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/COMПорт = "COM" + СТРОКА( НомерПорта );/##CHR(13)##//##CHR(10)##/НомерПортаКД = COMОТКРЫТЬ( COMПорт + ",115200,8,N,O,N", "D:\QDP.log" );/##CHR(13)##//##CHR(10)##/IF ( НомерПортаКД >= 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если COM порт подключен, то передаем команду очистки экрана/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( НомерПортаКД, 0x02F00342544F4E03 );/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( НомерПортаКД, 0x02F003434C5303 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СБП_ДИСПЛЕЙ[ НомерПорта ] = НомерПортаКД;',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##/RETURN СУММАКОПЛАТЕ;',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'//Выполнить оплату/##CHR(13)##//##CHR(10)##/QRКод = "https://qr.nspk.ru/" + ИДКлиента + "?type=01&bank=" + ИДБанка + "&sum=" + СТРОКА( СУММАКОПЛАТЕ * 100 ) + "&cur=RUB&crc=0C8A|QR код для оплаты";/##CHR(13)##//##CHR(10)##/НомерПортаКД = СБП_ДИСПЛЕЙ[ НомерПорта ];/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДлинаСтроки = СТРОКА( ДЛИНА( QRКод ), 10, 0, true, true, 16 );/##CHR(13)##//##CHR(10)##/COMЗАПИСАТЬ( НомерПортаКД, ВМАССИВ( "0x02f20200" + ДлинаСтроки +/##CHR(13)##//##CHR(10)##/ ПОДСТРОКА( СТРОКА( МАССИВИЗСТРОКИ( QRКод ) ), 3 ) + "02f202", "HEXSTRING" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN СООБЩЕНИЕ( "Нажмите Ok, если оплата прошла успешно." + CHR( 13 ) + "Иначе Отмена", "Оплата СБП", 1 ) == 1;',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/RETURN СООБЩЕНИЕ( "Отмена оплаты по СБП не предусмотрена." + CHR( 13 ) + /##CHR(13)##//##CHR(10)##/ "Верните наличные денежные средства в размере " + СТРОКА( СУММАКОПЛАТЕ, 16, 2 ) + " руб." + CHR( 13 ) +/##CHR(13)##//##CHR(10)##/ "Нажмите Да, если возврат прошел успешно.", "Возврат денежных средств", 1 ) == 1;/##CHR(13)##//##CHR(10)##/',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "Система быстрых платежей (Mertech)";',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/RETURN "Mertech " + КОДОБОРУДОВАНИЯ;',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,0,0,'21.04.2022 9:19:53') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Система быстрых платежей (Mertech)','ПС',0.00000000,'Профиль формирует QR код для оплаты посредством системы быстрых платежей/##CHR(13)##//##CHR(10)##/Главному окну РМК отправляется запрос на отображение этого кода. /##CHR(13)##//##CHR(10)##/Для примера, сумма платежа ограничивается 15000 рублей.',0.00000000,235.00000000,0,'',0.00000000,'','',0,'4D70E29B-D85A-4485-BC0A-685B834461C7',0,1,0,'21.04.2022 9:19:53') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система АТОЛ) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система АТОЛ) #code 0000000193 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( true );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "ПСАТОЛ" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "ПСАТОЛ" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "ПСАТОЛ" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "ПСАТОЛ" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система АТОЛ)','ФР',0.00000000,'',0.00000000,7475.00000000,0,'',0.00000000,'','',0,'4FC3657E-AC35-499D-AAC6-DA94D6122FCD',0,1,0,'11.05.2022 22:09:49') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система СБЕРБАНК) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система СБЕРБАНК) #code 0000000194 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "СБЕРБАНК" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "СБЕРБАНК" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "СБЕРБАНК" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "СБЕРБАНК" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( true );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'11.05.2022 22:09:49') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10, Платежная система СБЕРБАНК)','ФР',0.00000000,'',0.00000000,7476.00000000,0,'',0.00000000,'','',0,'828F080D-0165-4132-936F-E1EB9BCBE83C',0,1,0,'11.05.2022 22:09:49') #begin #description Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.05, ДККТ 4.Х-5.Х) #name Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.05, ДККТ 4.Х-5.Х) #code 0000000210 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.Штрих_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ЗакрытиеЧека( "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ПризнакНаличияОшибки();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_КоличествоЗарегистрированныхУстройств();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.Штрих_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ПечатьПречека();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_АктивацияФР( );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ДеактивацияФР( );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.Штрих_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ЗакрытиеЧека( "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.ШТРИХ_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_СписокРазрешенныхОтчетов( );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.05, ДККТ 4.Х-5.Х)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Штрх с поддержкой работы по ФФД 1.05./##CHR(13)##//##CHR(10)##/Совместимо с версией Айтида 4.4.5 и выше.',0.00000000,7511.00000000,0,'',0.00000000,'','',0,'A0C2D21A-8E4B-4114-BE92-16E52DF2CFA4',0,1,0,'11.05.2022 22:10:02') #begin #description Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.2, ДККТ 5.Х) #name Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.2, ДККТ 5.Х) #code 0000000211 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',97.00000000,'//Новый документ./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_НовыйДокумент( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ЗакрытиеЧека( "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ЗакрытиеЧека( "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ПризнакНаличияОшибки();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_СписокРазрешенныхОтчетов( false );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.ШТРИХ_ПечатьПречека();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "ШТРИХ" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "" );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.Штрих_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',138.00000000,'//Проверка кода маркировки./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОбработатьКМ( ФР.КОДОБОРУДОВАНИЯ(), КОДМАРКИРОВКИ);',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_АктивацияФР( );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ДеактивацияФР( );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.ШТРИХ_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.Штрих_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_КоличествоЗарегистрированныхУстройств();',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.Штрих_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.Штрих_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Штрих (ФН, ФФД 1.2, ДККТ 5.Х)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Штрх с поддержкой работы по ФФД 1.2./##CHR(13)##//##CHR(10)##/Совместимо с версией Айтида 4.4.5 и выше.',0.00000000,7510.00000000,0,'',0.00000000,'','',0,'C9B5DB6A-5305-4E0B-80E4-3C7A5C9274FF',0,1,0,'11.05.2022 22:10:02') #begin #description Профиль ФР Атол v.4 (ФН, ФФД 1.05) #name Профиль ФР Атол v.4 (ФН, ФФД 1.05) #code 0000000139 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //n=1;/##CHR(13)##//##CHR(10)##/ //_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ = 2;/##CHR(13)##//##CHR(10)##/ //WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ // Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ // n++;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ //Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ // 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ // 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''06'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''05'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 7, 1);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 9, 4);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = true; //по умолчанию будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 2;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 3;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 4;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/_СУММАСКИДКИВСЕГО = totaldiscount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) - 1;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + " КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ) , 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ }//IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ВСЕГОСКИДКАНАЧЕК >= _ВСЕГООПЛАТАБОНУСАМИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); /##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка регистрации позиции чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.EndItem( ); //повторим команду регистрации позиции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать копии/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки, если печать копии чека завершилась ошибкой/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати копии чека", "Код ошибки: " + КодОшибки + " Описание: " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##///читаем номер ФД из 52 регистра/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 52;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened == true;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/_СУММАСКИДКИВСЕГО = totaldiscount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка подключения к ККМ " + КодОшибки + CHR(13) + ОписаниеОшибки, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.Beep();/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК += СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК += СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.4 (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,4626.00000000,0,'',0.00000000,'','',0,'7EB236B0-0A7E-48EF-9706-CC595CE0B528',0,1,0,'11.05.2022 22:09:50') #begin #description Профиль ФР Атол v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Атол v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000140 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##///читаем номер ФД из 52 регистра/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 52;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened == true;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //n=1;/##CHR(13)##//##CHR(10)##/ //_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ = 2;/##CHR(13)##//##CHR(10)##/ //WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ // Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ // n++;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ //Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка подключения к ККМ " + КодОшибки + CHR(13) + ОписаниеОшибки, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.Beep();/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( ( Результат >= 0 ) OR ( Результат < -10000 AND Результат > -11000 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = CREATEOBJECT( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0) - 1;/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ < 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ //обработка ситуаций с Автоотменой и "Не оплачено"/##CHR(13)##//##CHR(10)##/ СтрокаНеявныхОшибокПС = "АВТООТМЕНА,НЕ ОПЛАЧИВАТЬ";/##CHR(13)##//##CHR(10)##/ ЕстьНеявныеОшибкиПС = false;/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО( ALLTRIM( DriverPayCard.Text ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ATC( СтрокаНеявныхОшибокПС, UPPER( ALLTRIM( DriverPayCard.Text ) ) ) > 0 AND UPPER( ALLTRIM( DriverPayCard.Text ) ) <> "ОТМЕНА" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьНеявныеОшибкиПС = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.Caption = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Вопрос = "Прервать печать всех слипов?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать слипов",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ //напечатаем шапку клише из ФР/##CHR(13)##//##CHR(10)##/ IF ( _МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //на последнем слипе вызываем печать заголовка клише, чтобы кассовый чек получился с клише/##CHR(13)##//##CHR(10)##/ IF ( !_МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ AND НОМЕРКОПИИСЛИПА == _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader(); //повторим команду печати заголовка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати клише " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ПрерываниеПечати) BREAK;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintString( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = true;/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //полная отрезка слипа/##CHR(13)##//##CHR(10)##/ Driver.FullCut( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если встретили "Автоотмена" или "Не оплачивать", то выдаем пользователю информацию и предлагаем прервать или продолжить чек/##CHR(13)##//##CHR(10)##/ IF ( ЕстьНеявныеОшибкиПС )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Пожалуйста, обратите внимание на банковский слип. " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Вероятно данная операция не прошла через платежную систему." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Продолжить формирование кассового чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"ВНИМАНИЕ!!!",4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==7) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false; //возвращаем ошибку операции через ПС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ), 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ }//IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL(ВСЕГОСКИДКАНАЧЕК) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции - ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ ВСЕГОСКИДКАНАЧЕК = 0; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка регистрации позиции чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.EndItem( ); //повторим команду регистрации позиции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать копии/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки, если печать копии чека завершилась ошибкой/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати копии чека", "Код ошибки: " + КодОшибки + " Описание: " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = TOTALDISCOUNT;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции работы с ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьВозрастБуфераФН()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ВозврастБуфераДней;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьСтатусСменыККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаДатаОкончанияСмены = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":" + RIGHT("00" + Driver.Second,2);/##CHR(13)##//##CHR(10)##/ ДатаОкончанияСмены = CTOD(СтрокаДатаОкончанияСмены,0); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = Driver.SessionExceedLimit;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24часа == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДатаТекущая = DATE();/##CHR(13)##//##CHR(10)##/ IF ( ДатаТекущая >= ДатаОкончанияСмены)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СменаПревысила24часа = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СменаПревысила24часа;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ // 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ // 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''06'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''05'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 7, 1);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 9, 4);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber, ЕстьНеявныеОшибкиПС;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = true; //по умолчанию будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 2;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 3;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 4;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //проверим подключение к ккм перед проведением операции по ПС./##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ //в тестовом режиме попробуем войти в режим регистрации для проверки пароля/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 1; /##CHR(13)##//##CHR(10)##/ Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.TestMode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //проверим состояние смены/##CHR(13)##//##CHR(10)##/ СменаПревысила24Часа = ПолучитьСтатусСменыККМ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаПревысила24Часа == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Смена превысила 24 часа. Необходимо закрыть смену в ККМ";/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера ФН/##CHR(13)##//##CHR(10)##/ МаксимальныйВозрастБуфера = 30; //30 дней/##CHR(13)##//##CHR(10)##/ ВозрастБуфераФН = ПолучитьВозрастБуфераФН();/##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН < 0) ВозрастБуфераФН = -1*ВозрастБуфераФН;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВозрастБуфераФН >= МаксимальныйВозрастБуфера)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = "Превышен максимальный срок хранения чеков в фискальном накопителе." + CHR(13) + "Необходимо настроить передачу чеков в ОФД";/##CHR(13)##//##CHR(10)##/ КодОшибки = 235; //код ошибки превышения возраста буфера/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка подключения ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //осовбодим ресурсы/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ //\\ конец проверок состояния ККМ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,5958.00000000,0,'',0.00000000,'','',0,'B8399181-CE1D-46D0-81B0-4C9142618F5E',0,1,0,'11.05.2022 22:09:50') #begin #description Профиль ФР Атол v.4.1 (ФН, ФФД 1.05) #name Профиль ФР Атол v.4.1 (ФН, ФФД 1.05) #code 0000000212 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.Deviceenabled = true;/##CHR(13)##//##CHR(10)##/Driver.OpenDrawer( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Внесение/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashIncome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим регистрации/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/Driver.Mode = 1;/##CHR(13)##//##CHR(10)##/Driver.SetMode();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выплата/##CHR(13)##//##CHR(10)##/Driver.Summ = Сумма;/##CHR(13)##//##CHR(10)##/Driver.CashOutcome();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Полная отрезка чека/##CHR(13)##//##CHR(10)##/Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Показать свойства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) - 1;/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.ShowProperties( );/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/ Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ Driver.Mode = 1; // Режим регистрации/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода SetMode " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/ Driver.PrintHeader( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = Driver.Session;/##CHR(13)##//##CHR(10)##/ IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = Driver.DocNumber;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ИНН: " + ЧЕКИНН, 20 ) + " КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 0;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 0;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Barcode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.PrintPurpose = 1;/##CHR(13)##//##CHR(10)##/ Driver.Alignment = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintBarcodeText = 0;/##CHR(13)##//##CHR(10)##/ Driver.Height = 16384;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeType = 84;/##CHR(13)##//##CHR(10)##/ Driver.Scale = 600;/##CHR(13)##//##CHR(10)##/ Driver.BarcodeOptions = 0x02000001;/##CHR(13)##//##CHR(10)##/ Driver.CorrectionLevel = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.PrintBarcode( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ // Если открыть документ удалось, то открываем чек/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ Driver.CheckMode = ЕСЛИ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ), 0, 1 );/##CHR(13)##//##CHR(10)##/ Driver.OpenCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 3 параметра/##CHR(13)##//##CHR(10)##/ // 1008 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 1021 - имя кассира/##CHR(13)##//##CHR(10)##/ // 1055 - система налогообложения/##CHR(13)##//##CHR(10)##/ Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/ Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = ПОЧТА;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИМЯКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1021;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = _ИННКАССИРА;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1203;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.AttrValue = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1055;/##CHR(13)##//##CHR(10)##/ Driver.AttrNumber = 1055;/##CHR(13)##//##CHR(10)##/ Driver.WriteAttribute( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 ) throw( 1055 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + Driver.ResultCode + " " + Driver.ResultDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.Value == 1 )/##CHR(13)##//##CHR(10)##/ }//IF ( Driver.ResultCode == 0 )/##CHR(13)##//##CHR(10)##/ }//IF ( VAL( КомандыЧека.checktype ) > 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Caption = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ Driver.BeginItem(); /##CHR(13)##//##CHR(10)##/ Driver.Name = LEFT(КомандыЧека.name,128);/##CHR(13)##//##CHR(10)##/ Driver.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ Driver.Price = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ Driver.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ Driver.DiscountType = КомандыЧека.discounttype;/##CHR(13)##//##CHR(10)##/ Driver.DiscountValue = 0;//КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ Driver.TaxTypeNumber = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.Summ = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ Driver.TaxMode = 0; //налог на позицию/##CHR(13)##//##CHR(10)##/ Driver.TaxSumm = 0;/##CHR(13)##//##CHR(10)##/ Driver.ItemType = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver.EndItem(); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка регистрации позиции чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.EndItem( ); //повторим команду регистрации позиции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.summ = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ IF ( Driver.Payment( ) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //при работе по ФФД 1.05 не будем запиминать остаток оплаты и фиксировать его при закрытии чека на последний вид оплаты,/##CHR(13)##//##CHR(10)##/ //т.к. это может привести к некорректному распределению видов оплат/##CHR(13)##//##CHR(10)##/ //ОстатокОплаты = Driver.Remainder;/##CHR(13)##//##CHR(10)##/ //ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( ОстатокОплаты > 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.summ = ОстатокОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.TypeClose = ТипОплаты;/##CHR(13)##//##CHR(10)##/ // Driver.Payment( );/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ //Driver.TypeClose = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента/##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка закрытия чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CloseCheck( ); //повторим команду закрытия чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ Driver.PrintString( );*//##CHR(13)##//##CHR(10)##/ Driver.PrintHeader();/##CHR(13)##//##CHR(10)##/ IF (Driver.Model <> 61 AND Driver.Model <> 67 AND Driver.Model <> 72 AND Driver.Model <> 75 AND Driver.Model <> 77 AND Driver.Model <> 78)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.FullCut();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать копии/##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( );/##CHR(13)##//##CHR(10)##/ //проверим не кончилась ли чековая лента /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати копии чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.PrintLastCheckCopy( ); //повторим команду печати копии чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки, если печать копии чека завершилась ошибкой/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати копии чека", "Код ошибки: " + КодОшибки + " Описание: " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при отмене чека" );/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.ValuePurpose = 0;/##CHR(13)##//##CHR(10)##/Driver.ReadFNStatus( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (Driver.Value == 1) //если ККМ с ФН/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 0;/##CHR(13)##//##CHR(10)##/ Driver.SetMode();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 44;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL(Driver.Count);/##CHR(13)##//##CHR(10)##/ IF (КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 45;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + Driver.Day,2) + "." + RIGHT("00" + Driver.Month,2) + "." + Driver.Year + " " + RIGHT("00" + Driver.Hour,2) + ":" + RIGHT("00" + Driver.Minute,2) + ":00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог согласно нижней таблице налогов (более часто встречающийся вариант)/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.004 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи AND СуммаСкидкиПозиции <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара;//summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи AND СуммаСкидкиПозиции <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 4 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/IF ( РезультатПечатиЧека == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьЧекаНаФР( ); //повторим команду печати строки/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = 0;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == 1;/##CHR(13)##//##CHR(10)##/// Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.Mode = 2; // Режим X-отчетов/##CHR(13)##//##CHR(10)##///Driver.SetMode( );/##CHR(13)##//##CHR(10)##/Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/Driver.ReportType = 2; // Отчет без гашения/##CHR(13)##//##CHR(10)##/Driver.Report();/##CHR(13)##//##CHR(10)##/IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати X-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Полная отрезка чека (на новых ККМ работает только полная)/##CHR(13)##//##CHR(10)##///Driver.FullCut();/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 18;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/СменаОткрыта = Driver.SessionOpened == true;/##CHR(13)##//##CHR(10)##/IF (!СменаОткрыта)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена в ККМ закрыта");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Driver.Mode = 3; // Режим Z-отчетов/##CHR(13)##//##CHR(10)##/ Driver.NewDocument( );/##CHR(13)##//##CHR(10)##/ Driver.SetMode( );/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = 1; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати Z-отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Полная отрезка чека/##CHR(13)##//##CHR(10)##/ //Driver.FullCut(); // если отрезка настроена в ККМ, то программная отрезка не нужна, иначе будет двойной отрез/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ Driver.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ Driver.RegisterNumber = 19;/##CHR(13)##//##CHR(10)##/ Driver.GetRegister( );/##CHR(13)##//##CHR(10)##/ IF (Driver.CheckState <> 0) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.CancelCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ Driver.Mode = 2; // Режим отчетов/##CHR(13)##//##CHR(10)##/ //Driver.SetMode();/##CHR(13)##//##CHR(10)##/ Driver.NewDocument();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОшибкиЧековойЛенты = -3807;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ Driver.ReportType = ТипОтчета; // Отчет с гашением/##CHR(13)##//##CHR(10)##/ Driver.Report();/##CHR(13)##//##CHR(10)##/ IF ( Driver.ResultCode <> 0 AND Driver.ResultCode <> КодОшибкиЧековойЛенты )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( Driver.ResultDescription, "Ошибка " + Driver.ResultCode + " при печати отчета" );/##CHR(13)##//##CHR(10)##/ Driver.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (Driver.ResultCode == КодОшибкиЧековойЛенты)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "В ККМ нет бумаги." + CHR(13) + "Вставьте бумагу и нажмите кнопку ""Повторить""";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка чековой ленты",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Driver.Report(); //повторим команду печати отчета/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ BREAK; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //n=1;/##CHR(13)##//##CHR(10)##/ //_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ = 2;/##CHR(13)##//##CHR(10)##/ //WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМ)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Driver.Caption = "";/##CHR(13)##//##CHR(10)##/ // Driver.PrintString( );/##CHR(13)##//##CHR(10)##/ // n++;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ // Полная отрезка чека /##CHR(13)##//##CHR(10)##/ //Driver.FullCut( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( " Тип отчета с кодом " + ТипОтчета + "не поддерживается " );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/IF (Driver.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = Driver.ResultDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = Driver.ResultCode;/##CHR(13)##//##CHR(10)##/ Driver = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка подключения к ККМ " + КодОшибки + CHR(13) + ОписаниеОшибки, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver.Beep();/##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ Driver.GetCurrentMode();/##CHR(13)##//##CHR(10)##/ Статус = Driver.Mode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ Driver.GetStatus();/##CHR(13)##//##CHR(10)##/ Статус = VAL( Driver.Session ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN Статус;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //прошивка 4555, ФФД 1.0/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ // 3 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ // 4 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 5 - НДС 0%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 6 - без НДС /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ //остальные случаи/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 3, ЕСЛИ( КодНалогаАйтида == ''06'', 1, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 1 - НДС 0%/##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 3 - НДС 18%/##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС/##CHR(13)##//##CHR(10)##/ // 5 - НДС 10/110%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 18/118%/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''06'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''05'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 7, 1);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, 9, 4);/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = true; //по умолчанию будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 2;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 3;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 4;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/Driver.GetStatus( );/##CHR(13)##//##CHR(10)##/НомерСменыККМ = Driver.Session + 1;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/Driver.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##///читаем номер ФД из 52 регистра/##CHR(13)##//##CHR(10)##/Driver.RegisterNumber = 52;/##CHR(13)##//##CHR(10)##/Driver.GetRegister();/##CHR(13)##//##CHR(10)##/IF (Driver.DocNumber == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.CheckNumber;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = Driver.DocNumber + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/Driver.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = Driver.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Driver = CreateObject( "AddIn.FPrnM45", 1 );/##CHR(13)##//##CHR(10)##/deviceCount = Driver.DeviceCount;/##CHR(13)##//##CHR(10)##/Driver = false;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.4.1 (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,7336.00000000,0,'',0.00000000,'','',0,'AB63B5D5-357D-46F8-AD05-3852FE5F57BD',0,1,0,'11.05.2022 22:10:02') #begin #description Профиль ФР Штрих v.4 (ФН, ФФД 1.05) #name Профиль ФР Штрих v.4 (ФН, ФФД 1.05) #code 0000000143 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - (ЦенаТоварнойПозиции*Количество - СуммаТовара);/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN Driver.ECRMode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.FNSessionState == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии Z-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.SysAdminCancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии X-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/driverKKM.FNGetInfoExchangeStatus( );/##CHR(13)##//##CHR(10)##/КоличествоЧеков = driverKKM.MessageCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = "" + driverKKM.Date + " " + "00:00:00"; /##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/deviceCount = driverKKM.LDCount;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##///функция, которая устанавливает тэг для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ УстановитьТэг(Пароль,НомерАтрибута,ЗначениеАтрибута)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ЗначениеАтрибута) OR ЗначениеАтрибута == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = ТипАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 0 ) // ttByte/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 1 ) // ttUint16/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 2 ) // ttUint32/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 3 ) // ttVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута; /##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 4 ) // ttFVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueFVLN = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 5 ) // ttBitMask/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 6 ) // ttUnixTime /##CHR(13)##//##CHR(10)##/ driverKKM.TagValueDateTime = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 7 ) // ttString/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Password = Пароль;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag();/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ОписаниеОшибки = "Ошибка при установке реквизита "+НомерАтрибута;/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck();/##CHR(13)##//##CHR(10)##/ Результат = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция для программирования таблиц ККМ/##CHR(13)##//##CHR(10)##///используется для установки некоторых параметров ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПрограммированиеТаблицККТ(Режим,НомерТаблицы,НомерРяда,НомерПоля,ТипПоля,Значение)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Password = "30"; //пароль администратора/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = НомерТаблицы;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = НомерРяда;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = НомерПоля;/##CHR(13)##//##CHR(10)##/ driverKKM.ReadTable();/##CHR(13)##//##CHR(10)##/ СтароеЗначение = ЕСЛИ( ТипПоля == 0, driverKKM.ValueOfFieldInteger, driverKKM.ValueOfFieldString); //0 - целое число, 1 - строка символов/##CHR(13)##//##CHR(10)##/ IF ( Режим == "Чтение" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = СтароеЗначение; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СтароеЗначение <> Значение )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипПоля == 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = Значение;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldString = Значение;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка "+ЕСЛИ( Режим == "Чтение", "записи в таблицу ", "обращения к таблице ") + НомерТаблицы);/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = -1; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьВидОперациивЧеке( ТипЧекаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ == 0 ) //приход/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 2 ) //возврат прихода/##CHR(13)##//##CHR(10)##/ ВидОперации = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 1 ) //расход/##CHR(13)##//##CHR(10)##/ ВидОперации = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 3 ) //возврат расхода/##CHR(13)##//##CHR(10)##/ ВидОперации = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ВидОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьТокенВебКасса( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Токен = "";/##CHR(13)##//##CHR(10)##/ ЛогинWebKassa = "k.smirnov@2x2z.ru";/##CHR(13)##//##CHR(10)##/ ПарольWebKassa = "Kassa123";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://devkkm.webkassa.kz", 443, true);/##CHR(13)##//##CHR(10)##/ Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/Authorize";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТелоЗапроса = "{""Login"": """ + ЛогинWebKassa + """, ""Password"": """ + ПарольWebKassa + """}";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ТелоЗапроса, "Заголовки");/##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( Ответ, "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Данные", json.Data );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Данные"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(Данные.Token))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Токен = Данные.Token; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Данные");/##CHR(13)##//##CHR(10)##/ RETURN Токен;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте - выводит нефискальные строки на чековой ленте с заданным в переданных параметрах положением строки/##CHR(13)##//##CHR(10)##///ПоложениеСтроки: C - Центр //обрабатывается так же вариант ошибочного указания русской буквы С/##CHR(13)##//##CHR(10)##/// L - Лево/##CHR(13)##//##CHR(10)##/// R - Право/##CHR(13)##//##CHR(10)##/// LR - Слева и справа/##CHR(13)##//##CHR(10)##/// LRC - По ширине //вариант с русской буквой С так же обрабатывается/##CHR(13)##//##CHR(10)##/// CR - По центру и правому краю (для этого варианта будем пользоваться LRC с передачей строки из одного пробела для левой строки/##CHR(13)##//##CHR(10)##///ПозицияЦентр - положение центральной строки на ленте для варианта LRC. Если равно 0 или пустое, то определяется расчетным путем. /##CHR(13)##//##CHR(10)##/// Передается в случаях, если нужно отцентровать одинаково несколько центральных строк/##CHR(13)##//##CHR(10)##///СтрокаДляПечати - печатаемая строка/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиЦ - строка, печатаемая по центру, для варианта положения строки LRC/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиП - строка, печатаемая справа, для вариантов положения строки LRC и LR/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, ПоложениеСтроки, СтрокаДляПечатиЦ, СтрокаДляПечатиП, ПозицияЦентр)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечати = LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиЦ = LEN(СтрокаДляПечатиЦ);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиП = LEN(СтрокаДляПечатиП);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = "";/##CHR(13)##//##CHR(10)##/ IF (ПоложениеСтроки == "L")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "R")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ((ПоложениеСтроки == "C") OR (ПоложениеСтроки == "С") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = INT((ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати))/2);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "LR")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", ДлинаСтрокиПробелов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( (ПоложениеСтроки == "LRC") OR (ПоложениеСтроки == "LRС") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиЦ - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ IF (ПозицияЦентр <> 0 AND !ПУСТО(ПозицияЦентр))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = ПозицияЦентр;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = INT(ДлинаСтрокиПробелов/2);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияП = ДлинаСтрокиПробелов - НачальнаяПозицияЦ;/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = REPLICATE(" ", НачальнаяПозицияЦ);/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", НачальнаяПозицияП); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.Caption = ОтступПечатиЛ + СтрокаДляПечати + ОтступПечатиЦ + СтрокаДляПечатиЦ + ОтступПечатиП + СтрокаДляПечатиП;/##CHR(13)##//##CHR(10)##/ Driver.TextWrap = 1;/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverKKM, ТипЧекаККМ;/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //true - определять коды налогов в ККМ из доп кодов карточек кодов налогов; false - не определять/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 2; /##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 15;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 16;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( resultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при установке связи с ККМ" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##///driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/IF ( driverKKM.FNSessionState = 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ driverKKM.OpenSession();/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintCliche( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.UseReceiptRibbon = TRUE;/##CHR(13)##//##CHR(10)##/ driverKKM.UseJournalRibbon = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = driverKKM.SessionNumber;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = driverKKM.OpenDocumentNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;//QR Code/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //0 baCenter по центру; 1 baLeft влево; 2 baRight вправо/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.LoadAndPrint2DBarcode( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ //driverKKM.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ //driverKKM.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог значением по умолчанию/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - (ЦенаТоварнойПозиции*Количество - СуммаТовара);/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих v.4 (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,5916.00000000,0,'',0.00000000,'','',0,'679DD863-B59A-4579-80E6-1DA7DBF26F59',0,1,0,'11.05.2022 22:09:51') #begin #description Профиль ФР Штрих v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Штрих v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000144 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/driverKKM.FNGetInfoExchangeStatus( );/##CHR(13)##//##CHR(10)##/КоличествоЧеков = driverKKM.MessageCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = "" + driverKKM.Date + " " + "00:00:00"; /##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции; /##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии X-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##///функция, которая устанавливает тэг для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ УстановитьТэг(Пароль,НомерАтрибута,ЗначениеАтрибута)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ЗначениеАтрибута) OR ЗначениеАтрибута == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = ТипАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 0 ) // ttByte/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 1 ) // ttUint16/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 2 ) // ttUint32/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 3 ) // ttVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута; /##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 4 ) // ttFVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueFVLN = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 5 ) // ttBitMask/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 6 ) // ttUnixTime /##CHR(13)##//##CHR(10)##/ driverKKM.TagValueDateTime = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 7 ) // ttString/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Password = Пароль;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag();/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ОписаниеОшибки = "Ошибка при установке реквизита "+НомерАтрибута;/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck();/##CHR(13)##//##CHR(10)##/ Результат = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция для программирования таблиц ККМ/##CHR(13)##//##CHR(10)##///используется для установки некоторых параметров ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПрограммированиеТаблицККТ(Режим,НомерТаблицы,НомерРяда,НомерПоля,ТипПоля,Значение)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Password = "30"; //пароль администратора/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = НомерТаблицы;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = НомерРяда;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = НомерПоля;/##CHR(13)##//##CHR(10)##/ driverKKM.ReadTable();/##CHR(13)##//##CHR(10)##/ СтароеЗначение = ЕСЛИ( ТипПоля == 0, driverKKM.ValueOfFieldInteger, driverKKM.ValueOfFieldString); //0 - целое число, 1 - строка символов/##CHR(13)##//##CHR(10)##/ IF ( Режим == "Чтение" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = СтароеЗначение; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СтароеЗначение <> Значение )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипПоля == 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = Значение;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldString = Значение;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка "+ЕСЛИ( Режим == "Чтение", "записи в таблицу ", "обращения к таблице ") + НомерТаблицы);/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = -1; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьВидОперациивЧеке( ТипЧекаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ == 0 ) //приход/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 2 ) //возврат прихода/##CHR(13)##//##CHR(10)##/ ВидОперации = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 1 ) //расход/##CHR(13)##//##CHR(10)##/ ВидОперации = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 3 ) //возврат расхода/##CHR(13)##//##CHR(10)##/ ВидОперации = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ВидОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverKKM, ТипЧекаККМ;/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _ШИРИНАЛЕНТЫ, _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //true - определять коды налогов в ККМ из доп кодов карточек кодов налогов, false - не определять/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 2; /##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 15;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 16;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( resultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при установке связи с ККМ" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##///driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN VAL( driverKKM.OpenDocumentNumber ) + 1;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/IF ( driverKKM.FNSessionState = 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ driverKKM.OpenSession();/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0);/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ == 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //частичная отрезка слипа/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintCliche( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.UseReceiptRibbon = TRUE;/##CHR(13)##//##CHR(10)##/ driverKKM.UseJournalRibbon = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = driverKKM.SessionNumber;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = driverKKM.OpenDocumentNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;//QR Code/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = ДЛИНА( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //0 baCenter по центру; 1 baLeft влево; 2 baRight вправо/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = 6;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.LoadAndPrint2DBarcode( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ //driverKKM.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ //driverKKM.TextWrap = 2;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation(); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог значением по умолчанию/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - (ЦенаТоварнойПозиции*Количество - СуммаТовара);/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - (ЦенаТоварнойПозиции*Количество - СуммаТовара);/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.SysAdminCancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0);/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ == 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии Z-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN Driver.ECRMode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.FNSessionState == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.LDIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/deviceCount = driverKKM.LDCount;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 27;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих v.4 (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,5957.00000000,0,'',0.00000000,'','',0,'CEAF683E-BC44-42DD-88EC-0B6D18A817B2',0,1,0,'11.05.2022 22:09:51') #begin #description Профиль ФР Штрих v.5 (ФН, ФФД 1.05) #name Профиль ФР Штрих v.5 (ФН, ФФД 1.05) #code 0000000166 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "ФР ШТРИХ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВА+1;/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВерсияДрайвера = ALLTRIM(driverKKM.DriverVersion);/##CHR(13)##//##CHR(10)##/СовместимаяВерсия = "4.14.0.772";/##CHR(13)##//##CHR(10)##/i = 0;/##CHR(13)##//##CHR(10)##/ДрайверСовместим = true;/##CHR(13)##//##CHR(10)##/FOR( i=1; i <= MIN( LEN(ВерсияДрайвера), LEN(СовместимаяВерсия) ); i++)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR(ВерсияДрайвера,i,1) <> SUBSTR(СовместимаяВерсия,i,1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (SUBSTR(ВерсияДрайвера,i,1) == ".")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ IF ( VAL( SUBSTR( ВерсияДрайвера,i,1) ) < VAL( SUBSTR( СовместимаяВерсия,i,1) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДрайверСовместим = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ДрайверСовместим)/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для передачи тэгов маркировки, а так же наименования и ИНН покупателя в составе реквизитов кассового чека необходимо использовать драйвер ККМ не ниже чем " + СовместимаяВерсия,"Версия драйвера");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ШТРИХ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "ФР ШТРИХ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВА+1;/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/deviceCount = driverKKM.LDCount;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (driverKKM.Connected == true)/##CHR(13)##//##CHR(10)##/ driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера /##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##/НеВыводитьСообщение = ЕСЛИ( ПУСТО( НеВыводитьСообщение ), false, НеВыводитьСообщение );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/driverKKM.FNGetInfoExchangeStatus( );/##CHR(13)##//##CHR(10)##/КоличествоЧеков = driverKKM.MessageCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = "" + driverKKM.Date + " " + "00:00:00"; /##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(driverKKM.PrintWidth<>0,driverKKM.PrintWidth,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПРПозиции; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СРПозиции;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СпособРасчета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(driverKKM.PrintWidth<>0,driverKKM.PrintWidth,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПРПозиции; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СРПозиции;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СпособРасчета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.SysAdminCancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ШТРИХ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 32 символа/##CHR(13)##//##CHR(10)##/driverKKM.GetDeviceMetrics();/##CHR(13)##//##CHR(10)##/МодельККМ = VAL(driverKKM.UModel);/##CHR(13)##//##CHR(10)##/IF ( МодельККМ == 0 OR МодельККМ == 1 OR МодельККМ == 4 OR МодельККМ == 8 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-ФР-Ф или Штрих-ФР-К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 36;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Элвес-Мини-ФР-Ф/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 24; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 5 OR МодельККМ == 11 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-950К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 40; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Элвес-ФР-К /##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 32; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 7 OR МодельККМ == 14 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-Мини-ФР-К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 36;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 9 OR МодельККМ == 12 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-Комбо-ФРК/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 48;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 32;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ШИРИНАЧЕКОВОЙЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии X-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии Z-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42, 100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = true;/##CHR(13)##//##CHR(10)##/ //проверим что номер чека передан, т.е. выбрали конкретный чек из списка или номер у выбранного чека не равен 0/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( VAL(НОМЕРЧЕКА) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не выбран кассовый чек для печати копии", "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ПечатаемКопию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DocumentNumber = НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ driverKKM.ShowTagNumber = 0;/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNPrintDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN Driver.ECRMode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.FNSessionState == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция ПолучитьДлиннуШтрихкодаМаркировки()/##CHR(13)##//##CHR(10)##///Описание: Получает gtin и серийный номер из штрихкода маркировки по типу маркировки и возвращает общую длинну кода маркировки без крпиптохвоста/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Параметры: /##CHR(13)##//##CHR(10)##/// ШтрихкодМаркировки - штрихкод марки, из которого извлекаем gtin и serial/##CHR(13)##//##CHR(10)##/// ТипМаркировки - строка, тип маркировки, по которому определяем какое количество символов serial брать из ШтрихкодаМаркировки/##CHR(13)##//##CHR(10)##/// gtin - экспортный параметр, заполняется полученным значением gtin/##CHR(13)##//##CHR(10)##/// serial - экспортный параметр, заполняется полученным значением serial/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьДлиннуШтрихкодаМаркировки(ШтрихкодМаркировки, ТипМаркировки, gtin, serial)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = 1; //определеяем начало символов расположения GTIN в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ //если встретили первыми двумя символами идентификатор 01, то смещаем начало чтения GTIN/##CHR(13)##//##CHR(10)##/ IF ( LEFT( ШтрихкодМаркировки, 2 ) == "01" ) /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = НачалоСимволовGTIN + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ GTIN/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШтрихкодМаркировки, НачалоСимволовGTIN, 14);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = LEN(gtin) + НачалоСимволовGTIN; // вычисляем начало символов расположения SERIAL в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, 2) == "21" ) //если сразу после GTIN встретили идентификатор 21, то смещаем начало чтения серийного номера на 2 символа/##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = НачалоСимволовSERIAL + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //наиболее распространенный вариант/##CHR(13)##//##CHR(10)##/ //далее по типу маркировки определим сколько символов необходимо брать для SERIAL/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //табак/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "1520" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //обувь/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0003" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //лекарства/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0002" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //шубы/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9999" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //прочая/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9996" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //фото/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9995" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //парфюм/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9997" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //шины/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9998" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //легпром/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9994" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //АТП/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ SERIAL/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, КоличествоСимволовSERIAL);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлиннаКода = НачалоСимволовSERIAL + КоличествоСимволовSERIAL - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ДлиннаКода;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintCliche( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.UseReceiptRibbon = TRUE;/##CHR(13)##//##CHR(10)##/ driverKKM.UseJournalRibbon = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = driverKKM.SessionNumber;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = driverKKM.OpenDocumentNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Способ = 1;/##CHR(13)##//##CHR(10)##/ КоэффициентШК = 4;/##CHR(13)##//##CHR(10)##/ IF ( Способ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;//QR Code/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = LEN( ALLTRIM( КомандыЧека.egais_url ) );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM(КомандыЧека.egais_url);/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //0 baCenter по центру; 1 baLeft влево; 2 baRight вправо/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = КоэффициентШК;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.LoadAndPrint2DBarcode();/##CHR(13)##//##CHR(10)##/ //driverKKM.Print2DBarcode();/##CHR(13)##//##CHR(10)##/ driverKKM.Barcode = ""; //освободим память, занятую штрихкодом/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM(КомандыЧека.egais_url);/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarWidth = КоэффициентШК;/##CHR(13)##//##CHR(10)##/ driverKKM.LineNumber = 130*КоэффициентШК;/##CHR(13)##//##CHR(10)##/ //driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintBarcodeText = 0; //печатать символы ШК/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //по центру/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintBarcodeGraph();/##CHR(13)##//##CHR(10)##/ driverKKM.Barcode = ""; //освободим память, занятую штрихкодом/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим информацию о бонусах в чек/##CHR(13)##//##CHR(10)##/ IF (_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ == true AND !ПУСТО( НОМЕРКАРТЫ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТИПБОНУСА= ЗАПРОС( "SELECT bonusalias FROM sprbonus WHERE code IN ( SELECT bonus FROM sprmcard WHERE cardn = ''" + НОМЕРКАРТЫ + "'' )" );/##CHR(13)##//##CHR(10)##/ ОПЛАЧЕНОБОНУСОМ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''-'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ НАЧИСЛЕНОБОНУСОВ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''+'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ ОСТАТОКБОНУСОВ = STR( ЗАПРОС( "SELECT dbo.fn_calccard_bonus( ''" + НОМЕРКАРТЫ + "'', ''" + ТИПБОНУСА + "'', DEFAULT );" ), 10, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "---------------------------------------------";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Списано бонусов: " + ОПЛАЧЕНОБОНУСОМ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Начислено бонусов: " + НАЧИСЛЕНОБОНУСОВ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Остаток бонусов: " + ОСТАТОКБОНУСОВ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "---------------------------------------------";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(ШИРИНАЧЕКОВОЙЛЕНТЫ<>0,ШИРИНАЧЕКОВОЙЛЕНТЫ,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ = false; //признак необходимости выводить букву [М] для товарной позиции в чеке средствами профиля. По умолчанию отключено (значение false),/##CHR(13)##//##CHR(10)##/ //т.к. ожидается что буква [М] будет выводиться средствами прошивки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НаименованиеТовараВЧеке = ЕСЛИ(_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ == true AND !ПУСТО( КомандыЧека.markbc ), "[М] ","") + ALLTRIM(КомандыЧека.name);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = НаименованиеТовараВЧеке;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162") == "U")/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 = false; //признак необходимости использовать старый формат тэга 1162 для чеков. По умолчанию равен false, т.е. используется новый формат/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = 0;/##CHR(13)##//##CHR(10)##/ gtin = "";/##CHR(13)##//##CHR(10)##/ serial = "";/##CHR(13)##//##CHR(10)##/ new_marktype = 17485; //для табака, обуви и прочих, кроме шуб/##CHR(13)##//##CHR(10)##/ marktype = КомандыЧека.marktype;/##CHR(13)##//##CHR(10)##/ markbc = КомандыЧека.markbc;/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = ПолучитьДлиннуШтрихкодаМаркировки(markbc, marktype, gtin, serial);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( marktype ) == 2 AND _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true ) //меховые изделия/##CHR(13)##//##CHR(10)##/ new_marktype = 21062;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ = true; //признак необходимости передавать весь код маркировки в составе реквизитов чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ == false AND ДлинаКодаМаркировки > 0 )/##CHR(13)##//##CHR(10)##/ markbc = LEFT( КомандыЧека.markbc, ДлинаКодаМаркировки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_СПОСОБФОРМИРОВАНИЯТЭГА1162 == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM( markbc );/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendItemBarcode();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(gtin) AND !ПУСТО(serial))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.MarkingType = ЕСЛИ(_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true, VAL(marktype), new_marktype);/##CHR(13)##//##CHR(10)##/ driverKKM.SerialNumber = serial;/##CHR(13)##//##CHR(10)##/ driverKKM.GTIN = gtin;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendItemCodeData();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = TOTALDISCOUNT;/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), /##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, marktype char(10), markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("КОНТРАГЕНТ") == "U")/##CHR(13)##//##CHR(10)##/ КОНТРАГЕНТ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ //driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_shtrih_log_" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ driverKKM.ComLogFile = ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/ driverKKM.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF (driverKKM.Connected == false)/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/ resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( resultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при установке связи с ККМ" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///функция, которая устанавливает тэг для чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_УстановитьТэг(Пароль,НомерАтрибута,ЗначениеАтрибута)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ЗначениеАтрибута) OR ЗначениеАтрибута == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = ТипАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 0 ) // ttByte/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 1 ) // ttUint16/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 2 ) // ttUint32/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 3 ) // ttVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута; /##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 4 ) // ttFVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueFVLN = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 5 ) // ttBitMask/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 6 ) // ttUnixTime /##CHR(13)##//##CHR(10)##/ driverKKM.TagValueDateTime = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 7 ) // ttString/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Password = Пароль;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag();/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ОписаниеОшибки = "Ошибка при установке реквизита "+НомерАтрибута;/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck();/##CHR(13)##//##CHR(10)##/ Результат = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция для программирования таблиц ККМ/##CHR(13)##//##CHR(10)##///используется для установки некоторых параметров ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПрограммированиеТаблицККТ(Режим,НомерТаблицы,НомерРяда,НомерПоля,ТипПоля,Значение)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Password = "30"; //пароль администратора/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = НомерТаблицы;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = НомерРяда;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = НомерПоля;/##CHR(13)##//##CHR(10)##/ driverKKM.ReadTable();/##CHR(13)##//##CHR(10)##/ СтароеЗначение = ЕСЛИ( ТипПоля == 0, driverKKM.ValueOfFieldInteger, driverKKM.ValueOfFieldString); //0 - целое число, 1 - строка символов/##CHR(13)##//##CHR(10)##/ IF ( Режим == "Чтение" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = СтароеЗначение; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СтароеЗначение <> Значение )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипПоля == 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = Значение;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldString = Значение;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка "+ЕСЛИ( Режим == "Чтение", "записи в таблицу ", "обращения к таблице ") + НомерТаблицы);/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьНалогККМПоТипуНалога" - функция, которая получает значение кода налога в ККМ по типу налога из карточки налога справочника кодов налогов в Айтиде (из поля "Рассчитывать")/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// КодНалогаАйтида - код налога из справочники Кодов Налогов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT proc_, ntype FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''","ДанныеПоНалогу", 1);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ ТипНалога = ДанныеПоНалогу.ntype;/##CHR(13)##//##CHR(10)##/ ПроцентНалога = ДанныеПоНалогу.proc_;/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Тип налога в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 20% 1 - НДС 20% /##CHR(13)##//##CHR(10)##/ //05 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //07 - НДС 0% 3 - НДС 0%/##CHR(13)##//##CHR(10)##/ //"" - Без НДС 4 - налогом не облагается/##CHR(13)##//##CHR(10)##/ // 1 - НДС 18%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // 5 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьНалогККМПоКодуНалога. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( ТипНалога == ''06'', "1", ЕСЛИ( ТипНалога == ''05'', "2", ЕСЛИ( ТипНалога == ''07'', "3", 4 ) ) );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = -1; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ == 0 ) //приход/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 2 ) //возврат прихода/##CHR(13)##//##CHR(10)##/ ВидОперации = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 1 ) //расход/##CHR(13)##//##CHR(10)##/ ВидОперации = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 3 ) //возврат расхода/##CHR(13)##//##CHR(10)##/ ВидОперации = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ВидОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте - выводит нефискальные строки на чековой ленте с заданным в переданных параметрах положением строки/##CHR(13)##//##CHR(10)##///ПоложениеСтроки: C - Центр //обрабатывается так же вариант ошибочного указания русской буквы С/##CHR(13)##//##CHR(10)##/// L - Лево/##CHR(13)##//##CHR(10)##/// R - Право/##CHR(13)##//##CHR(10)##/// LR - Слева и справа/##CHR(13)##//##CHR(10)##/// LRC - По ширине //вариант с русской буквой С так же обрабатывается/##CHR(13)##//##CHR(10)##/// CR - По центру и правому краю (для этого варианта будем пользоваться LRC с передачей строки из одного пробела для левой строки/##CHR(13)##//##CHR(10)##///ПозицияЦентр - положение центральной строки на ленте для варианта LRC. Если равно 0 или пустое, то определяется расчетным путем. /##CHR(13)##//##CHR(10)##/// Передается в случаях, если нужно отцентровать одинаково несколько центральных строк/##CHR(13)##//##CHR(10)##///СтрокаДляПечати - печатаемая строка/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиЦ - строка, печатаемая по центру, для варианта положения строки LRC/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиП - строка, печатаемая справа, для вариантов положения строки LRC и LR/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, ПоложениеСтроки, СтрокаДляПечатиЦ, СтрокаДляПечатиП, ПозицияЦентр)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечати = LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиЦ = LEN(СтрокаДляПечатиЦ);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиП = LEN(СтрокаДляПечатиП);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = "";/##CHR(13)##//##CHR(10)##/ IF (ПоложениеСтроки == "L")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "R")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ((ПоложениеСтроки == "C") OR (ПоложениеСтроки == "С") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = INT((ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати))/2);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "LR")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", ДлинаСтрокиПробелов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( (ПоложениеСтроки == "LRC") OR (ПоложениеСтроки == "LRС") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиЦ - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ IF (ПозицияЦентр <> 0 AND !ПУСТО(ПозицияЦентр))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = ПозицияЦентр;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = INT(ДлинаСтрокиПробелов/2);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияП = ДлинаСтрокиПробелов - НачальнаяПозицияЦ;/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = REPLICATE(" ", НачальнаяПозицияЦ);/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", НачальнаяПозицияП); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.StringForPrinting = ОтступПечатиЛ + СтрокаДляПечати + ОтступПечатиЦ + СтрокаДляПечатиЦ + ОтступПечатиП + СтрокаДляПечатиП;/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverKKM, ТипЧекаККМ;/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, ШИРИНАЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКАНАЧЕК, _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ;/##CHR(13)##//##CHR(10)##/PUBLIC ШТРИХ_КодВидаОплатыНаличные, ШТРИХ_КодВидаОплатыБезналичные, ШТРИХ_КодВидаОплатыПредоплата, ШТРИХ_КодВидаОплатыКредит, ШТРИХ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, НомерЧекаККМ, НомерСменыККМ, _СПОСОБФОРМИРОВАНИЯТЭГА1162;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //true - определять коды налогов в ККМ из доп кодов карточек кодов налогов; false - не определять/##CHR(13)##//##CHR(10)##/ШИРИНАЧЕКОВОЙЛЕНТЫ = 32;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыНаличные = 1;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыБезналичные= 2; /##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыПредоплата = 14;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыКредит = 15;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыПрочее = 16;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE ("_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ = false; //Необходимость вывода информации о начисленных и списанных бонусных баллах на чеке, а так же остаток бонусов. true - выводить, false - не выводить/##CHR(13)##//##CHR(10)##/ //Работает на версии 4.0.6 и выше, при использовании стандартной бонусной системы/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_СПОСОБФОРМИРОВАНИЯТЭГА1162 = 2; //1 или 2/##CHR(13)##//##CHR(10)##/ //1 способ формирования - по примеру с закладки КТ в тесте драйвера/##CHR(13)##//##CHR(10)##/ //2 способ формирования - по примеру с закладки КТ2 в тесте драйвера/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##///driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерСменыККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/ IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/НомерСменыККМ = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерЧекаККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/ IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Прибавка = 0;/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus(); /##CHR(13)##//##CHR(10)##/IF (driverKKM.ECRMode == 8) //чек открыт/##CHR(13)##//##CHR(10)##/ Прибавка = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = VAL( driverKKM.OpenDocumentNumber ) + Прибавка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/IF ( driverKKM.FNSessionState = 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ driverKKM.OpenSession();/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих v.5 (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,6187.00000000,0,'',0.00000000,'','',0,'4CF311FD-2C61-49FA-AD90-F97265083253',0,1,0,'11.05.2022 22:09:51') #begin #description Профиль ФР Штрих v.5 (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Штрих v.5 (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000167 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ШИРИНАЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0);/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ == 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия Z-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии Z-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ШИРИНАЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42, 0, 50, 100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Входим в режим снятия отчетов/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Снимаем отчет/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintDepartmentReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 8)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintCashierReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 9)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.PrintWareReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 41)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.RepeatDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNBuildCalculationStateReport() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 0 OR (ТипОтчета == 50))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0);/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ == 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки отчета " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = true;/##CHR(13)##//##CHR(10)##/ //проверим что номер чека передан, т.е. выбрали конкретный чек из списка или номер у выбранного чека не равен 0/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( VAL(НОМЕРЧЕКА) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не выбран кассовый чек для печати копии", "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ПечатаемКопию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DocumentNumber = НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ driverKKM.ShowTagNumber = 0;/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.FNPrintDocument() <> 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "MODE" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем только режим - это быстрее, чем запрос состояния/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN Driver.ECRMode;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Запрашиваем состояние/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus();/##CHR(13)##//##CHR(10)##/ RETURN VAL( Driver.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/ RETURN driverKKM.FNSessionState == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ //ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_shtrih_log_" + КОДОБОРУДОВАНИЯ + ".txt"; /##CHR(13)##//##CHR(10)##/ driverKKM.ComLogFile = ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/ driverKKM.LogOn = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ; // Номер логического устройства/##CHR(13)##//##CHR(10)##/ // Загружаем параметры логического устройсва в поля драйвера/##CHR(13)##//##CHR(10)##/ //driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вызываем метод соединения с ФР/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ IF (driverKKM.Connected == false)/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если возникла ошибка, то фиксируем ее/##CHR(13)##//##CHR(10)##/ resultCode = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( resultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при установке связи с ККМ" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция, которая устанавливает тэг для чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_УстановитьТэг(Пароль,НомерАтрибута,ЗначениеАтрибута)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ЗначениеАтрибута) OR ЗначениеАтрибута == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TagNumber = НомерАтрибута;/##CHR(13)##//##CHR(10)##/ driverKKM.FNGetTagDescription();/##CHR(13)##//##CHR(10)##/ ТипАтрибута = driverKKM.TagType;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagType = ТипАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 0 ) // ttByte/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 1 ) // ttUint16/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 2 ) // ttUint32/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueInt = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 3 ) // ttVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута; /##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 4 ) // ttFVLN/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueFVLN = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 5 ) // ttBitMask/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueBin = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 6 ) // ttUnixTime /##CHR(13)##//##CHR(10)##/ driverKKM.TagValueDateTime = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ IF ( ТипАтрибута == 7 ) // ttString/##CHR(13)##//##CHR(10)##/ driverKKM.TagValueStr = ЗначениеАтрибута;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Password = Пароль;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendTag();/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ОписаниеОшибки = "Ошибка при установке реквизита "+НомерАтрибута;/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck();/##CHR(13)##//##CHR(10)##/ Результат = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Результат;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция для программирования таблиц ККМ/##CHR(13)##//##CHR(10)##///используется для установки некоторых параметров ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПрограммированиеТаблицККТ(Режим,НомерТаблицы,НомерРяда,НомерПоля,ТипПоля,Значение)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Password = "30"; //пароль администратора/##CHR(13)##//##CHR(10)##/ driverKKM.TableNumber = НомерТаблицы;/##CHR(13)##//##CHR(10)##/ driverKKM.RowNumber = НомерРяда;/##CHR(13)##//##CHR(10)##/ driverKKM.FieldNumber = НомерПоля;/##CHR(13)##//##CHR(10)##/ driverKKM.ReadTable();/##CHR(13)##//##CHR(10)##/ СтароеЗначение = ЕСЛИ( ТипПоля == 0, driverKKM.ValueOfFieldInteger, driverKKM.ValueOfFieldString); //0 - целое число, 1 - строка символов/##CHR(13)##//##CHR(10)##/ IF ( Режим == "Чтение" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = СтароеЗначение; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СтароеЗначение <> Значение )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипПоля == 0 )/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldInteger = Значение;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.ValueOfFieldString = Значение;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WriteTable();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка "+ЕСЛИ( Режим == "Чтение", "записи в таблицу ", "обращения к таблице ") + НомерТаблицы);/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьНалогККМПоТипуНалога" - функция, которая получает значение кода налога в ККМ по типу налога из карточки налога справочника кодов налогов в Айтиде (из поля "Рассчитывать")/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// КодНалогаАйтида - код налога из справочники Кодов Налогов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT proc_, ntype FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''","ДанныеПоНалогу", 1);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ ТипНалога = ДанныеПоНалогу.ntype;/##CHR(13)##//##CHR(10)##/ ПроцентНалога = ДанныеПоНалогу.proc_;/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Тип налога в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 20% 1 - НДС 20% /##CHR(13)##//##CHR(10)##/ //05 - НДС 10% 2 - НДС 10%/##CHR(13)##//##CHR(10)##/ //07 - НДС 0% 3 - НДС 0%/##CHR(13)##//##CHR(10)##/ //"" - Без НДС 4 - налогом не облагается/##CHR(13)##//##CHR(10)##/ // 1 - НДС 18%/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // 5 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьНалогККМПоКодуНалога. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( ТипНалога == ''06'', "1", ЕСЛИ( ТипНалога == ''05'', "2", ЕСЛИ( ТипНалога == ''07'', "3", 4 ) ) );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = -1; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ == 0 ) //приход/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 2 ) //возврат прихода/##CHR(13)##//##CHR(10)##/ ВидОперации = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 1 ) //расход/##CHR(13)##//##CHR(10)##/ ВидОперации = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаККМ == 3 ) //возврат расхода/##CHR(13)##//##CHR(10)##/ ВидОперации = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ВидОперации = 1; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ВидОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте - выводит нефискальные строки на чековой ленте с заданным в переданных параметрах положением строки/##CHR(13)##//##CHR(10)##///ПоложениеСтроки: C - Центр //обрабатывается так же вариант ошибочного указания русской буквы С/##CHR(13)##//##CHR(10)##/// L - Лево/##CHR(13)##//##CHR(10)##/// R - Право/##CHR(13)##//##CHR(10)##/// LR - Слева и справа/##CHR(13)##//##CHR(10)##/// LRC - По ширине //вариант с русской буквой С так же обрабатывается/##CHR(13)##//##CHR(10)##/// CR - По центру и правому краю (для этого варианта будем пользоваться LRC с передачей строки из одного пробела для левой строки/##CHR(13)##//##CHR(10)##///ПозицияЦентр - положение центральной строки на ленте для варианта LRC. Если равно 0 или пустое, то определяется расчетным путем. /##CHR(13)##//##CHR(10)##/// Передается в случаях, если нужно отцентровать одинаково несколько центральных строк/##CHR(13)##//##CHR(10)##///СтрокаДляПечати - печатаемая строка/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиЦ - строка, печатаемая по центру, для варианта положения строки LRC/##CHR(13)##//##CHR(10)##///СтрокаДляПечатиП - строка, печатаемая справа, для вариантов положения строки LRC и LR/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыводСтрокиОтчетаНаЛенте(СтрокаДляПечати, ПоложениеСтроки, СтрокаДляПечатиЦ, СтрокаДляПечатиП, ПозицияЦентр)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечати = LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиЦ = LEN(СтрокаДляПечатиЦ);/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПечатиП = LEN(СтрокаДляПечатиП);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = "";/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = "";/##CHR(13)##//##CHR(10)##/ IF (ПоложениеСтроки == "L")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "R")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ((ПоложениеСтроки == "C") OR (ПоложениеСтроки == "С") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = INT((ШИРИНАЧЕКОВОЙЛЕНТЫ - LEN(СтрокаДляПечати))/2);/##CHR(13)##//##CHR(10)##/ ОтступПечатиЛ = REPLICATE(" ", НачальнаяПозиция);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ПоложениеСтроки == "LR")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", ДлинаСтрокиПробелов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( (ПоложениеСтроки == "LRC") OR (ПоложениеСтроки == "LRС") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 0;/##CHR(13)##//##CHR(10)##/ ДлинаСтрокиПробелов = ШИРИНАЧЕКОВОЙЛЕНТЫ - ДлинаСтрокиПечати - ДлинаСтрокиПечатиЦ - ДлинаСтрокиПечатиП;/##CHR(13)##//##CHR(10)##/ IF (ПозицияЦентр <> 0 AND !ПУСТО(ПозицияЦентр))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = ПозицияЦентр;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияЦ = INT(ДлинаСтрокиПробелов/2);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НачальнаяПозицияП = ДлинаСтрокиПробелов - НачальнаяПозицияЦ;/##CHR(13)##//##CHR(10)##/ ОтступПечатиЦ = REPLICATE(" ", НачальнаяПозицияЦ);/##CHR(13)##//##CHR(10)##/ ОтступПечатиП = REPLICATE(" ", НачальнаяПозицияП); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Driver.StringForPrinting = ОтступПечатиЛ + СтрокаДляПечати + ОтступПечатиЦ + СтрокаДляПечатиЦ + ОтступПечатиП + СтрокаДляПечатиП;/##CHR(13)##//##CHR(10)##/ Driver.PrintString();/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC driverKKM, ТипЧекаККМ;/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС, ШИРИНАЧЕКОВОЙЛЕНТЫ, НомерЧекаККМ, НомерСменыККМ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКАНАЧЕК, _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ;/##CHR(13)##//##CHR(10)##/PUBLIC ШТРИХ_КодВидаОплатыНаличные, ШТРИХ_КодВидаОплатыБезналичные, ШТРИХ_КодВидаОплатыПредоплата, ШТРИХ_КодВидаОплатыКредит, ШТРИХ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber, _СПОСОБФОРМИРОВАНИЯТЭГА1162;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //true - определять коды налогов в ККМ из доп кодов карточек кодов налогов, false - не определять/##CHR(13)##//##CHR(10)##/ШИРИНАЧЕКОВОЙЛЕНТЫ = 32; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыНаличные = 1;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыБезналичные= 2; /##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыПредоплата = 14;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыКредит = 15;/##CHR(13)##//##CHR(10)##/ШТРИХ_КодВидаОплатыПрочее = 16;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE ("_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ = false; //Необходимость вывода информации о начисленных и списанных бонусных баллах на чеке, а так же остаток бонусов. true - выводить, false - не выводить/##CHR(13)##//##CHR(10)##/ //Работает на версии 4.0.6 и выше, при использовании стандартной бонусной системы/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_СПОСОБФОРМИРОВАНИЯТЭГА1162 = 2; //1 или 2/##CHR(13)##//##CHR(10)##/ //1 способ формирования - по примеру с закладки КТ в тесте драйвера/##CHR(13)##//##CHR(10)##/ //2 способ формирования - по примеру с закладки КТ2 в тесте драйвера',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "ФР ШТРИХ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВА+1;/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВерсияДрайвера = ALLTRIM(driverKKM.DriverVersion);/##CHR(13)##//##CHR(10)##/СовместимаяВерсия = "4.14.0.772";/##CHR(13)##//##CHR(10)##/i = 0;/##CHR(13)##//##CHR(10)##/ДрайверСовместим = true;/##CHR(13)##//##CHR(10)##/FOR( i=1; i <= MIN( LEN(ВерсияДрайвера), LEN(СовместимаяВерсия) ); i++)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR(ВерсияДрайвера,i,1) <> SUBSTR(СовместимаяВерсия,i,1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (SUBSTR(ВерсияДрайвера,i,1) == ".")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ IF ( VAL( SUBSTR( ВерсияДрайвера,i,1) ) < VAL( SUBSTR( СовместимаяВерсия,i,1) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДрайверСовместим = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ДрайверСовместим)/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для передачи тэгов маркировки, а так же наименования и ИНН покупателя в составе реквизитов кассового чека необходимо использовать драйвер ККМ не ниже чем " + СовместимаяВерсия,"Версия драйвера");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.ShowProperties( );/##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'// Имя устройства ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN "ФР ШТРИХ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВА+1;/##CHR(13)##//##CHR(10)##/driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/deviceName = driverKKM.LDName;/##CHR(13)##//##CHR(10)##/driverKKM = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/ driverKKM = СоздатьОбъект( "Addin.DrvFR", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.GetCountLD();/##CHR(13)##//##CHR(10)##/deviceCount = driverKKM.LDCount;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" ) - 1;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Если ФР находится в режиме открытого чека, то отменяем чек/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 8 )/##CHR(13)##//##CHR(10)##/ driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Открытая смена, 24 часа кончились (необходимо закрыть смену).");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( driverKKM.ECRMode == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Блокировка по неправильному паролю налогового инспектора.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (driverKKM.Connected == true)/##CHR(13)##//##CHR(10)##/ driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##/// Уничтожаем объект драйвера /##CHR(13)##//##CHR(10)##/driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/driverKKM.Disconnect();/##CHR(13)##//##CHR(10)##///driverKKM = false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерСменыККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/ IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/НомерСменыККМ = VAL( driverKKM.SessionNumber ) + 1;/##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерЧекаККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF ( TYPE("driverKKM") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатПодключения = ШТРИХ_СОЗДАТЬОБЪЕКТДРАЙВЕРАИПОДКЛЮЧИТЬСЯ();/##CHR(13)##//##CHR(10)##/ IF (!РезультатПодключения)/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Прибавка = 0;/##CHR(13)##//##CHR(10)##/driverKKM.GetECRStatus(); /##CHR(13)##//##CHR(10)##/IF (driverKKM.ECRMode == 8) //чек открыт/##CHR(13)##//##CHR(10)##/ Прибавка = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = VAL( driverKKM.OpenDocumentNumber ) + Прибавка;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.FNGetCurrentSessionParams(); //получаем параметры смены/##CHR(13)##//##CHR(10)##/IF ( driverKKM.FNSessionState = 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ driverKKM.OpenSession();/##CHR(13)##//##CHR(10)##/ //отрезка/##CHR(13)##//##CHR(10)##/ driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/driverKKM.DrawerNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.OpenDrawer( );',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashInCome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при внесении денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// печать картинки/##CHR(13)##//##CHR(10)##/driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/driverKKM.LastLineNumber = 100;/##CHR(13)##//##CHR(10)##/driverKKM.DrawEx();/##CHR(13)##//##CHR(10)##/// конец печати картинки/##CHR(13)##//##CHR(10)##/// печать псевдо-клишке/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString1;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = ClicheString2;/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##///driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##///driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/// конец печати псевдо-клишке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.summ1 = Сумма;/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.CashOutcome( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при выплате денежной суммы" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.cutType = true;/##CHR(13)##//##CHR(10)##/driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция ПолучитьДлиннуШтрихкодаМаркировки()/##CHR(13)##//##CHR(10)##///Описание: Получает gtin и серийный номер из штрихкода маркировки по типу маркировки и возвращает общую длинну кода маркировки без крпиптохвоста/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Параметры: /##CHR(13)##//##CHR(10)##/// ШтрихкодМаркировки - штрихкод марки, из которого извлекаем gtin и serial/##CHR(13)##//##CHR(10)##/// ТипМаркировки - строка, тип маркировки, по которому определяем какое количество символов serial брать из ШтрихкодаМаркировки/##CHR(13)##//##CHR(10)##/// gtin - экспортный параметр, заполняется полученным значением gtin/##CHR(13)##//##CHR(10)##/// serial - экспортный параметр, заполняется полученным значением serial/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьДлиннуШтрихкодаМаркировки(ШтрихкодМаркировки, ТипМаркировки, gtin, serial)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = 1; //определеяем начало символов расположения GTIN в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ //если встретили первыми двумя символами идентификатор 01, то смещаем начало чтения GTIN/##CHR(13)##//##CHR(10)##/ IF ( LEFT( ШтрихкодМаркировки, 2 ) == "01" ) /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = НачалоСимволовGTIN + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ GTIN/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШтрихкодМаркировки, НачалоСимволовGTIN, 14);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = LEN(gtin) + НачалоСимволовGTIN; // вычисляем начало символов расположения SERIAL в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, 2) == "21" ) //если сразу после GTIN встретили идентификатор 21, то смещаем начало чтения серийного номера на 2 символа/##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = НачалоСимволовSERIAL + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //наиболее распространенный вариант/##CHR(13)##//##CHR(10)##/ //далее по типу маркировки определим сколько символов необходимо брать для SERIAL/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //табак/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "1520" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //обувь/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0003" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //лекарства/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0002" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //шубы/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9999" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //прочая/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9996" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //фото/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9995" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //парфюм/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9997" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //шины/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9998" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //легпром/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9994" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //АТП/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ SERIAL/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, КоличествоСимволовSERIAL);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлиннаКода = НачалоСимволовSERIAL + КоличествоСимволовSERIAL - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ДлиннаКода;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ШИРИНАЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,0);/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ЕСЛИ( ИНДЕКСУСТРОЙСВАПЕЧАТИ == 0, ИНДЕКСУСТРОЙСТВАККМ, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ driverKKM.GetParamLD( );/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.Connected = true;/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = DriverPayCard.Text;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка печати строки слипа " + КодОшибки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //частичная отрезка слипа/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true;/##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.GetECRStatus( );/##CHR(13)##//##CHR(10)##/ driverKKM.PrintCliche( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.UseReceiptRibbon = TRUE;/##CHR(13)##//##CHR(10)##/ driverKKM.UseJournalRibbon = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = driverKKM.SessionNumber;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = driverKKM.OpenDocumentNumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЧЕКНАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Способ = 1;/##CHR(13)##//##CHR(10)##/ КоэффициентШК = 4;/##CHR(13)##//##CHR(10)##/ IF ( Способ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;//QR Code/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeDataLength = LEN( ALLTRIM( КомандыЧека.egais_url ) );/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeStartBlockNumber = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM(КомандыЧека.egais_url);/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //0 baCenter по центру; 1 baLeft влево; 2 baRight вправо/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter3 = КоэффициентШК;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeParameter5 = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.LoadAndPrint2DBarcode();/##CHR(13)##//##CHR(10)##/ //driverKKM.Print2DBarcode();/##CHR(13)##//##CHR(10)##/ driverKKM.Barcode = ""; //освободим память, занятую штрихкодом/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM(КомандыЧека.egais_url);/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeType = 3;/##CHR(13)##//##CHR(10)##/ driverKKM.BarWidth = КоэффициентШК;/##CHR(13)##//##CHR(10)##/ driverKKM.LineNumber = 130*КоэффициентШК;/##CHR(13)##//##CHR(10)##/ //driverKKM.FirstLineNumber = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintBarcodeText = 0; //печатать символы ШК/##CHR(13)##//##CHR(10)##/ driverKKM.BarcodeAlignment = 0; //по центру/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintBarcodeGraph();/##CHR(13)##//##CHR(10)##/ driverKKM.Barcode = ""; //освободим память, занятую штрихкодом/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.egais_sign;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.WaitForPrinting( );/##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим информацию о бонусах в чек/##CHR(13)##//##CHR(10)##/ IF (_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ == true AND !ПУСТО( НОМЕРКАРТЫ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТИПБОНУСА= ЗАПРОС( "SELECT bonusalias FROM sprbonus WHERE code IN ( SELECT bonus FROM sprmcard WHERE cardn = ''" + НОМЕРКАРТЫ + "'' )" );/##CHR(13)##//##CHR(10)##/ ОПЛАЧЕНОБОНУСОМ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''-'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ НАЧИСЛЕНОБОНУСОВ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''+'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ ОСТАТОКБОНУСОВ = STR( ЗАПРОС( "SELECT dbo.fn_calccard_bonus( ''" + НОМЕРКАРТЫ + "'', ''" + ТИПБОНУСА + "'', DEFAULT );" ), 10, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "---------------------------------------------";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Списано бонусов: " + ОПЛАЧЕНОБОНУСОМ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Начислено бонусов: " + НАЧИСЛЕНОБОНУСОВ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "Остаток бонусов: " + ОСТАТОКБОНУСОВ;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "---------------------------------------------";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(ШИРИНАЧЕКОВОЙЛЕНТЫ<>0,ШИРИНАЧЕКОВОЙЛЕНТЫ,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ = false; //признак необходимости выводить букву [М] для товарной позиции в чеке средствами профиля. По умолчанию отключено (значение false),/##CHR(13)##//##CHR(10)##/ //т.к. ожидается что буква [М] будет выводиться средствами прошивки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = ЕСЛИ(_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ AND !ПУСТО( КомандыЧека.markbc ), "[М] ","") + КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162") == "U")/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 = false; //признак необходимости использовать старый формат тэга 1162 для чеков. По умолчанию равен false, т.е. используется новый формат/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = 0;/##CHR(13)##//##CHR(10)##/ gtin = "";/##CHR(13)##//##CHR(10)##/ serial = "";/##CHR(13)##//##CHR(10)##/ new_marktype = 17485; //для табака, обуви и прочих, кроме шуб/##CHR(13)##//##CHR(10)##/ marktype = КомандыЧека.marktype;/##CHR(13)##//##CHR(10)##/ markbc = КомандыЧека.markbc;/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = ПолучитьДлиннуШтрихкодаМаркировки(markbc, marktype, gtin, serial);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( marktype ) == 2 AND _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true ) //меховые изделия/##CHR(13)##//##CHR(10)##/ new_marktype = 21062;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ = true; //признак необходимости передавать весь код маркировки в составе реквизитов чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ == false AND ДлинаКодаМаркировки > 0 )/##CHR(13)##//##CHR(10)##/ markbc = LEFT( КомандыЧека.markbc, ДлинаКодаМаркировки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_СПОСОБФОРМИРОВАНИЯТЭГА1162 == 2)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.BarCode = ALLTRIM( markbc );/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendItemBarcode();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(gtin) AND !ПУСТО(serial))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.MarkingType = ЕСЛИ(_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true, VAL(marktype), new_marktype);/##CHR(13)##//##CHR(10)##/ driverKKM.SerialNumber = serial;/##CHR(13)##//##CHR(10)##/ driverKKM.GTIN = gtin;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendItemCodeData();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ШИРИНАЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = TOTALDISCOUNT;/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, marktype char(10), markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 0/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 3/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); //ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, "1", ЕСЛИ( ТипЧека == 5, "3", "0" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("КОНТРАГЕНТ") == "U")/##CHR(13)##//##CHR(10)##/ КОНТРАГЕНТ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( Наименование ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 11; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 12; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 4), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///сообщения для отладки /##CHR(13)##//##CHR(10)##///СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Цена: " + ЦенаТоварнойПозиции + " / Цена продажи: " + ЦенаПродажи + " / Сумма позиции: " + СуммаТовара + " / summasale: " + summasale + " / % ск: " + percentdiscount + " / S ск.: " + СуммаСкидкиПозиции + " / summadiscount: " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///IF ( СуммаСкидкиПозиции == 0 AND summadiscount <> 0)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СуммаСкидкиПозиции = ROUND( summadiscount, 2 );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то обнулим скидку на позицию. /##CHR(13)##//##CHR(10)##///По ФФД 1.05 передадим цену позиции без скидки и сумму позиции со скидкой - ККМ сама расчитает скидку/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВСЕГОСКИДКАНАЧЕК = ВСЕГОСКИДКАНАЧЕК - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = summasale - СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ШТРИХ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.SysAdminCancelCheck( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Количество неотправленных документов:/##CHR(13)##//##CHR(10)##/driverKKM.FNGetInfoExchangeStatus( );/##CHR(13)##//##CHR(10)##/КоличествоЧеков = driverKKM.MessageCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Дата самого старого неотправленного документа/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = "" + driverKKM.Date + " " + "00:00:00"; /##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ШТРИХ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ширина стандартная - 32 символа/##CHR(13)##//##CHR(10)##/driverKKM.GetDeviceMetrics();/##CHR(13)##//##CHR(10)##/МодельККМ = VAL(driverKKM.UModel);/##CHR(13)##//##CHR(10)##/IF ( МодельККМ == 0 OR МодельККМ == 1 OR МодельККМ == 4 OR МодельККМ == 8 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-ФР-Ф или Штрих-ФР-К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 36;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Элвес-Мини-ФР-Ф/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 24; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 5 OR МодельККМ == 11 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-950К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 40; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Элвес-ФР-К /##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 32; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 7 OR МодельККМ == 14 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-Мини-ФР-К/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 36;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( МодельККМ == 9 OR МодельККМ == 12 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Штрих-Комбо-ФРК/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 48;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = 32;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ШИРИНАЧЕКОВОЙЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вводим пароль оператора ККМ, входим в режим снятия X-отчетов/##CHR(13)##//##CHR(10)##/driverKKM.Password = FROperatorProfile;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Снимаем отчет/##CHR(13)##//##CHR(10)##/_ERROR = driverKKM.PrintReportWithoutCleaning( ) <> 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ MessageBox( driverKKM.ResultCodeDescription, "Ошибка " + driverKKM.ResultCode + " при снятии X-отчета" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Частичная отрезка чека/##CHR(13)##//##CHR(10)##/driverKKM.CutType = TRUE; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(driverKKM.PrintWidth<>0,driverKKM.PrintWidth,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПРПозиции; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СРПозиции;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СпособРасчета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //driverKKM = CreateObject( "AddIn.DRvFR", 1 );/##CHR(13)##//##CHR(10)##/ driverKKM.LDNumber = ИНДЕКСУСТРОЙСТВАККМ;/##CHR(13)##//##CHR(10)##/ driverKKM.SetActiveLD();/##CHR(13)##//##CHR(10)##/ driverKKM.Connect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка установки связи с ККМ " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОплаты = 0;/##CHR(13)##//##CHR(10)##/ ТипОплаты = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запрограммируем возможность использования скидок/##CHR(13)##//##CHR(10)##/ //в ФФД 1.05 на ККМ Штрих скидки носят лишь информационный характер и работа возможно только при правильно настроенной 17й таблице/##CHR(13)##//##CHR(10)##/ Значение = 2;/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,3,0,Значение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим имя кассира в таблице/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",2,FROperatorProfile,2,1,LEFT(_ИМЯКАССИРА,64));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после программирования таблиц заново установим пароль кассира/##CHR(13)##//##CHR(10)##/ driverKKM.Password = FROperatorProfile; // Пароль/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //driverKKM.CheckMode = ЕСЛИ( КомандыЧека.echeque, 0, 1 );/##CHR(13)##//##CHR(10)##/ _ERROR = driverKKM.OpenCheck( ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // После откртыия чека, если есть фискальный накопитель, то передаем в него 4 параметра/##CHR(13)##//##CHR(10)##/ // 1 - e-mail/телефон/##CHR(13)##//##CHR(10)##/ // 2 - имя кассира/##CHR(13)##//##CHR(10)##/ // 3 - инн кассира/##CHR(13)##//##CHR(10)##/ // 4 - признак электронного чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 0;/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ПОЧТА ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CustomerEmail = ПОЧТА;/##CHR(13)##//##CHR(10)##/ //driverKKM.TagNumber = 1008;/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1008;/##CHR(13)##//##CHR(10)##/ driverKKM.FNSendCustomerEmail( );/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1008 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( _ИМЯКАССИРА ) )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1021;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИМЯКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1021 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО ( _КАССИР) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(_ИННКАССИРА) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1203;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,_ИННКАССИРА);/##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 ) throw( 1203 ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ЭЛЕКТРОННЫЙЧЕК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Значение = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 );/##CHR(13)##//##CHR(10)##/ ПрограммированиеТаблицККТ("Запись",17,1,7,0,Значение);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1227;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,НаименованиеКлиента);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерАтрибута = 1228;/##CHR(13)##//##CHR(10)##/ ШТРИХ_УстановитьТэг(FROperatorProfile,НомерАтрибута,ИННКлиента);/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ( "Установка значения атрибута " + НомерАтрибута + " " + driverKKM.ResultCode + " " + driverKKM.ResultCodeDescription, "Установка значения атрибута " + НомерАтрибута );/##CHR(13)##//##CHR(10)##/ //driverKKM.CancelCheck( );/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( !_ERROR )/##CHR(13)##//##CHR(10)##/ }//IF ( КомандыЧека.checktype >= 0 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.mode == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = false;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = LEFT(КомандыЧека.name, ЕСЛИ(driverKKM.PrintWidth<>0,driverKKM.PrintWidth,32));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CarryStrings = true;/##CHR(13)##//##CHR(10)##/ СтрокаПечати = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = СтрокаПечати;/##CHR(13)##//##CHR(10)##/ driverKKM.PrintString( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //driverKKM.TEXTWRAP = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1Enabled = 1;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValueEnabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.CheckType = ШТРИХ_ПолучитьВидОперациивЧеке( ТипЧекаККМ ); //Тип операции (1 - Приход, 2 - Возврат прихода, 3 - расход, 4 - возврат расхода)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = КомандыЧека.name;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa - КомандыЧека.discountvalue; /##CHR(13)##//##CHR(10)##/ driverKKM.Price = ROUND( СуммаПозиции/КомандыЧека.quantity , 2);/##CHR(13)##//##CHR(10)##/ driverKKM.Quantity = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ driverKKM.Department = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ПЕЧАТАТЬНАЛОГИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Tax1 = КомандыЧека.kodn;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax2 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax3 = 0;/##CHR(13)##//##CHR(10)##/ //driverKKM.Tax4 = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.discountvalue > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.discountvalue < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.DiscountValue = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.ChargeValue = -КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentTypeSign = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.PaymentItemSign = КомандыЧека.rsubject; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = СуммаПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( КомандыЧека.discountvalue <> 0 )/##CHR(13)##//##CHR(10)##/ // driverKKM.FNDiscountOperation();/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ driverKKM.FNOperation();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.closetype == 1) //наличные/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 2) //банк. карта/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 14) //сертификаты (предоплата/аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 15) //последующая оплата (кредит)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.closetype == 16) //встречное предоставление (прочая)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = ROUND( КомандыЧека.price, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.RoundingSumm = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue1Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue2Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue3Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue4Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue5Enabled = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.TaxValue6Enabled = 0;/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( VAL( СистемаНО ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.TaxType = VAL( СистемаНО );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // строка, которая будет напечатана при закрытии/##CHR(13)##//##CHR(10)##/ driverKKM.StringForPrinting = "";/##CHR(13)##//##CHR(10)##/ //закрываем чек/##CHR(13)##//##CHR(10)##/ driverKKM.FNCloseCheckEx();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем состояние ФР. Пока находимся в состоянии печати нельзя произвести отрезку чека/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ startTime = TIME( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Ждем 20 секунд или пока напечатается чек/##CHR(13)##//##CHR(10)##/ WHILE ( TIME( ) - startTime < 20 AND advancedMode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WAIT(1000);/##CHR(13)##//##CHR(10)##/ driverKKM.GetShortECRStatus( );/##CHR(13)##//##CHR(10)##/ advancedMode = driverKKM.ECRAdvancedMode;/##CHR(13)##//##CHR(10)##/ // Если закончилась бумага и ее вставили, то подаем команду продолжить печать/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 3 ) driverKKM.ContinuePrint( );/##CHR(13)##//##CHR(10)##/ IF ( advancedMode == 1 OR advancedMode == 2 ) MessageBox( "В ККМ закончилась чековая лента.\nПожалуйста, заправьте новую чековую ленту.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнулим суммы в драйвере, чтобы не распространялись на следующий чек/##CHR(13)##//##CHR(10)##/ driverKKM.Summ1 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ2 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ3 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ4 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ5 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ6 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ7 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ8 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ9 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ10 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ11 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ12 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ13 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ14 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ15 = 0;/##CHR(13)##//##CHR(10)##/ driverKKM.Summ16 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //driverKKM.FeedDocument( );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ driverKKM.RepeatDocument( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ driverKKM.CutType = true; //TRUE – неполная отрезка, FALSE – полная отрезка./##CHR(13)##//##CHR(10)##/ driverKKM.CutCheck();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( driverKKM.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки и отмена чека/##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = driverKKM.ResultCodeDescription;/##CHR(13)##//##CHR(10)##/ КодОшибки = driverKKM.ResultCode;/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ driverKKM.SysAdminCancelCheck();/##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ОписаниеОшибки, "Ошибка метода " + Операция + " " + КодОшибки );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //driverKKM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject int, rvariant int, clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПРПозиции; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СРПозиции;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = ПредметРасчета;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СпособРасчета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ШТРИХ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ШТРИХ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ШТРИХ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'11.05.2022 22:09:51') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Штрих v.5 (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,6188.00000000,0,'',0.00000000,'','',0,'31A72B40-C63B-4F2B-A180-FA677EFB0061',0,1,0,'11.05.2022 22:09:51') #begin #description Весы с ПЭ CAS CL5000 (драйвер CAS) (разделение наименования по словам) #name Весы с ПЭ CAS CL5000 (драйвер CAS) (разделение наименования по словам) #code 0000000207 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##/Public SCALE, КоличествоСимволовВСтоке;/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ scale = СоздатьОбъект( "CAScentre_DLL_printScale.Scale", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ messagebox("не удалось создать объект");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ip = Запрос("select ip_addr from sprequipment where code = ''"+code+"''");/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ scale.IP = ip;/##CHR(13)##//##CHR(10)##/ scale.Port = 20304;/##CHR(13)##//##CHR(10)##/ scale.Type = 3;/##CHR(13)##//##CHR(10)##/ scale.Open(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/catch /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ messagebox(scale.Resultcode);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСимволовВСтоке = 22;',0,0,1,0,'11.05.2022 22:13:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{ SCALE.ClearPluAndMsg();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/сообщение("ошибка очистки весов"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##///сообщение(СРОКГОДНОСТИ);/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) return true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассивСлов[1] = "";/##CHR(13)##//##CHR(10)##/МассивСлов[2] = "";/##CHR(13)##//##CHR(10)##/МассивСлов[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаНаименование = " " + НАИМЕНОВАНИЕ;/##CHR(13)##//##CHR(10)##/НомерСлова = 1;/##CHR(13)##//##CHR(10)##/НомерСтрокиНаименования = 1;/##CHR(13)##//##CHR(10)##/СтрокаСлов = "";/##CHR(13)##//##CHR(10)##/Слово = ПОЛУЧИТЬСЛОВО(СтрокаНаименование, " ", " ", НомерСлова);/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( Слово ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( LEN( СтрокаСлов + ЕСЛИ( !ПУСТО(СтрокаСлов), " ", "") + Слово ) > КоличествоСимволовВСтоке )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МассивСлов[НомерСтрокиНаименования] = СтрокаСлов;/##CHR(13)##//##CHR(10)##/ СтрокаСлов = "";/##CHR(13)##//##CHR(10)##/ НомерСтрокиНаименования++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаСлов += ЕСЛИ( !ПУСТО(СтрокаСлов), " ", "") + Слово;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Слово = ПОЛУЧИТЬСЛОВО(СтрокаНаименование, " ", " ", НомерСлова); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("1 строка = " + МассивСлов[1] );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("2 строка = " + МассивСлов[2] );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("3 строка = " + МассивСлов[3] );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try /##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ scale.InitData();/##CHR(13)##//##CHR(10)##/ scale.pluNumber = ПЛУ;/##CHR(13)##//##CHR(10)##/ scale.pluItemCode = VAL( КОД );/##CHR(13)##//##CHR(10)##/ scale.pluPrice = ЦЕНА*100; /##CHR(13)##//##CHR(10)##/ scale.pluDept = 1;/##CHR(13)##//##CHR(10)##/ scale.pluName1 = МассивСлов[1];/##CHR(13)##//##CHR(10)##/ scale.pluName2 = МассивСлов[2];/##CHR(13)##//##CHR(10)##/ scale.pluName3 = МассивСлов[3]; /##CHR(13)##//##CHR(10)##/ прим = Запрос("select note from sprnn where maincode = ''"+код+"''");/##CHR(13)##//##CHR(10)##/ scale.pluTextMessage = LEFT( STRTRAN( прим, CHR( 10 ), "" ), 299);/##CHR(13)##//##CHR(10)##/ scale.pluType = 1;//ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##/ scale.pluDateLife = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/ scale.SendPlu(); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch {/##CHR(13)##//##CHR(10)##/ //messagebox(driverSCALE);/##CHR(13)##//##CHR(10)##/ messagebox(scale.ResultCode);/##CHR(13)##//##CHR(10)##/ _error=true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##/Scale.close();/##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'11.05.2022 22:13:42') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ CAS CL5000 (драйвер CAS) (разделение наименования по словам)','ВЕСЫ',0.00000000,'',0.00000000,7507.00000000,0,'',0.00000000,'','',0,'58F68A25-EBFD-4F3E-B085-8852BF3B51F3',0,1,0,'11.05.2022 22:13:42') #begin #description Профиль ТСД Data Mobile v.2.1 #name Профиль ТСД Data Mobile v.2.1 #code 0000000187 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ //СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Data Mobile";',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.1','ТСД',0.00000000,'',0.00000000,7389.00000000,0,'',0.00000000,'','',0,'814062D9-EDBC-49BD-B712-5F38BC90DF0C',0,1,0,'11.05.2022 22:13:55') #begin #description Профиль ТСД Data Mobile v.2.1 (с созданием новых товаров) #name Профиль ТСД Data Mobile v.2.1 (с созданием новых товаров) #code 0000000188 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'/##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##/СОЗДАВАТЬТОВАРЫ = true; //признак необходимости создания товаров, если не нашли в базе при загрузке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если в идентификаторе товара встретили dm то товар был создан на ТСД/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND ATC(КодТовара,"dm") > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СОЗДАНИЕ ТОВАРОВ/##CHR(13)##//##CHR(10)##/ IF ( СОЗДАВАТЬТОВАРЫ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПАПКАДЛЯНОВЫХТОВАРОВ = ЗАПРОС("SELECT identity_column FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND name = ''Справочник''");/##CHR(13)##//##CHR(10)##/ КОДНАЛОГА = ЗАПРОС( "SELECT value FROM param WHERE param = ''kodn''" );/##CHR(13)##//##CHR(10)##/ ЕДИНИЦАИЗМЕРЕНИЯ = "шт";/##CHR(13)##//##CHR(10)##/ КОДГРУППЫРЕСУРСОВ = "";/##CHR(13)##//##CHR(10)##/ МИНИМАЛЬНЫЙОСТАТОК = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬ = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАН = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАНЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ // Добвляем новый товар в нужную папку/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "INSERT INTO sprres ( code, maincode, name, shortname, alcocode, cat, kodn, note, ccgroup, group_, parent,/##CHR(13)##//##CHR(10)##/ ed, min_, lossrealization, lossstore, lossreal_val, lossstore_val )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ '''', dbo.fn_getnextmaincode( ), ''" + Наименование + "'', ''" + Наименование + "'', ''" + АлкоКод + "'', ''001'', ''" + КОДНАЛОГА + "'', ''Товар добавлен при загрузке из ТСД'',/##CHR(13)##//##CHR(10)##/ ''0000000001'', ''" + КОДГРУППЫРЕСУРСОВ + "'', " + ПАПКАДЛЯНОВЫХТОВАРОВ + ", ''" + ЕДИНИЦАИЗМЕРЕНИЯ + "'', " + STR( МИНИМАЛЬНЫЙОСТАТОК, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ''" + ЕСТУБЫЛЬ + "'', ''" + ЕСТУБЫЛЬХРАН + "'', " + STR( ЕСТУБЫЛЬЗНАЧ, 16 ,2 ) + ", " + STR( ЕСТУБЫЛЬХРАНЗНАЧ, 16, 2 ) + " ) " );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE identity_column = " + ИДТовара );/##CHR(13)##//##CHR(10)##/ //запишем штрихкод/##CHR(13)##//##CHR(10)##/ ИДШтрихкода = ЗАПРОС("INSERT INTO sprnnbc (nn, bc)/##CHR(13)##//##CHR(10)##/ VALUES (''" + Товар + "'',''" + ШтрихКод + "'')");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //КОНЕЦ СОЗДАНИЯ ТОВАРОВ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/RETURN "Data Mobile";',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2022 22:13:55') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.1 (с созданием новых товаров)','ТСД',0.00000000,'',0.00000000,7388.00000000,0,'',0.00000000,'','',0,'A4BECCD2-5B9E-4854-9E9F-F41A441103B9',0,1,0,'11.05.2022 22:13:55') #begin #description Получение веса с весов с печатью этикеток CAS CL-3000 (драйвер CAS) #name Получение веса с весов с печатью этикеток CAS CL-3000 (драйвер CAS) #code 0000000208 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/Public АдресВесов;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресВесов = ЗАПРОС("SELECT ip_addr FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ SCALE = СоздатьОбъект( "CAScentre_DLL_printScale.Scale", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ messagebox("Не удалось создать объект драйвера");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ SCALE.IP = АдресВесов;/##CHR(13)##//##CHR(10)##/ SCALE.Port = 20304;/##CHR(13)##//##CHR(10)##/ SCALE.Type = 3; //CAS CL 5000/##CHR(13)##//##CHR(10)##/ SCALE.Open();/##CHR(13)##//##CHR(10)##/ IF ( SCALE.Resultcode <> 0 ) THROW SCALE.Resultcode;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/catch(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ messagebox("Ошибка установки связи с весами. Код ошибки: " + КодОшибки);/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/SCALE.ReadCurrentStatus();/##CHR(13)##//##CHR(10)##/IF ( SCALE.Resultcode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ messagebox("Ошибка чтения статуса весов. Код ошибки: " + SCALE.Resultcode);/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ВЕС = 0;/##CHR(13)##//##CHR(10)##/ВесСтабилен = SCALE.statusStable;/##CHR(13)##//##CHR(10)##/ВЕС = VAL(SCALE.statusWeight);/##CHR(13)##//##CHR(10)##/ВремяОжиданияСтабилизации = 3000;/##CHR(13)##//##CHR(10)##/НачалоОжиданияСтабилизации = TICKCOUNT();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( (TICKCOUNT() - НачалоОжиданияСтабилизации) <= ВремяОжиданияСтабилизации AND !ВесСтабилен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ВесСтабилен = SCALE.statusStable;/##CHR(13)##//##CHR(10)##/ ВЕС = VAL(SCALE.statusWeight); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("ВЕС = " + ВЕС + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "ВесСтабилен = " + ВесСтабилен + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Код ошибки: " + SCALE.ResultCode);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/SCALE.close();/##CHR(13)##//##CHR(10)##/SCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВЕС;',0,0,1,0,'11.05.2022 22:16:24') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Получение веса с весов с печатью этикеток CAS CL-3000 (драйвер CAS)','ВЕСЫБЭ',0.00000000,'Профиль для получения веса в режиме работы с электронными весами с весов с печатью этикетов CAS CL 3000./##CHR(13)##//##CHR(10)##/Работа с весами осуществляется через драйвер CAS',0.00000000,7505.00000000,0,'',0.00000000,'','',0,'EEE771A5-8C80-4B2E-A791-422C0A1C93E0',0,1,0,'11.05.2022 22:16:24') #begin #description Обмен данными между Айтида и Эвотор v.3.9.7 #name Обмен данными между Айтида и Эвотор v.3.9.7 #code 0000000213 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##///ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "evotor_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = HTTPGET(Соединение, АдресРесурса, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ALLTRIM(ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')"));/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных. Проверьте соответсвие магазина в Эвотор и склада в карточке торгового оборудования";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ""; // передаем пустое тело в запросе для очистки всех товаров/##CHR(13)##//##CHR(10)##/ IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/ Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products/delete";/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось получить данные из облака Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF (( Ответ1 <> 200 ) AND (Ответ1<>""))/##CHR(13)##//##CHR(10)##/// {/##CHR(13)##//##CHR(10)##/// _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/// _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось отправить запрос на удаление всех товаров в облако Эвотор.";/##CHR(13)##//##CHR(10)##/// //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/// //RETURN false;/##CHR(13)##//##CHR(10)##/// } /##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = _ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ = ВЫЧИСЛИТЬ("_ЭВОТОР_АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = _ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ = ВЫЧИСЛИТЬ("_ЭВОТОР_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_in))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "evotor_in_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу+ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_in, RAT(path_in, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT(path_in, LEN(path_in)-RAT(path_in,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///запрос списка магазинов/##CHR(13)##//##CHR(10)##/УИДМАГАЗИНА = "";/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/search";/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/HTTPCLOSE(Соединение);/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS address, '''' AS name, '''' AS code SET FMTONLY OFF","СписокМагазинов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокМагазинов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНА = СписокМагазинов.uuid;/##CHR(13)##//##CHR(10)##/ АДРЕСМАГАЗИНА = СписокМагазинов.address;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕМАГАЗИНА = ALLTRIM(СписокМагазинов.name);/##CHR(13)##//##CHR(10)##/ КОДМАГАЗИНА = СписокМагазинов.code;/##CHR(13)##//##CHR(10)##/ IF (ИМЯСКЛАДА == НАЗВАНИЕМАГАЗИНА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокМагазинов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДМАГАЗИНА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить магазин в Эвотор для отправки данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///запрос списка устройств/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/devices/search";/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВРЕМЕННАЯЗОНАМАГАЗИНА = 0;/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS uuid, '''' AS name, '''' AS storeUuid, '''' AS timezoneOffset SET FMTONLY OFF","СписокТерминалов");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("СписокТерминалов","JSON",Ответ);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УИДТЕРМИНАЛА = СписокТерминалов.uuid;/##CHR(13)##//##CHR(10)##/ НАЗВАНИЕТЕРМИНАЛА = ALLTRIM(СписокТерминалов.name);/##CHR(13)##//##CHR(10)##/ УИДМАГАЗИНАТЕРМИНАЛА = СписокТерминалов.storeUuid;/##CHR(13)##//##CHR(10)##/ ВРЕМЕННАЯЗОНАМАГАЗИНА = VAL(СписокТерминалов.timezoneOffset);/##CHR(13)##//##CHR(10)##/ IF ((УИДМАГАЗИНАТЕРМИНАЛА == УИДМАГАЗИНА) AND (ИМЯОБОРУДОВАНИЯ == НАЗВАНИЕТЕРМИНАЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТерминалов");/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/IF (УИДТЕРМИНАЛА == "")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось определить терминал для получения данных.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПЕРИОДЗАГРУЗКИ = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF (ПЕРИОДЗАГРУЗКИ == 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ datebegin = ЗАПРОС("SELECT DATEADD(millisecond,-" + ВРЕМЕННАЯЗОНАМАГАЗИНА + ", ''" + TTOC( ЗАПРОС( "SELECT lastdownload FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) ) + "'')");/##CHR(13)##//##CHR(10)##/ dateend = ЗАПРОС("SELECT DATEADD(millisecond,-" + ВРЕМЕННАЯЗОНАМАГАЗИНА + ", ''" + TTOC( ДАТАВРЕМЯ() ) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ datebegin = ЗАПРОС("SELECT lastdownload FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##/ dateend = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( datebegin, 7, "-" ),10) + "T" + ALLTRIM(TTOC( datebegin, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( dateend, 7, "-" ),10) + "T" + ALLTRIM(TTOC( dateend, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid=" + УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ datebegin = ЗАПРОС("SELECT DATEADD(millisecond,-" + ВРЕМЕННАЯЗОНАМАГАЗИНА + ", ''" + TTOC(НАЧАЛОПЕРИОДА) + "'')");/##CHR(13)##//##CHR(10)##/ dateend = ЗАПРОС("SELECT DATEADD(millisecond,-" + ВРЕМЕННАЯЗОНАМАГАЗИНА + ", ''" + TTOC(КОНЕЦПЕРИОДА) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ datebegin = НАЧАЛОПЕРИОДА;/##CHR(13)##//##CHR(10)##/ dateend = КОНЕЦПЕРИОДА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ period = "?gtCloseDate=" + LEFT(TTOC( datebegin, 7, "-" ),10) + "T" + ALLTRIM(TTOC( datebegin, 8)) + ".000+0000" + "<CloseDate=" + LEFT(TTOC( dateend, 7, "-" ),10) + "T" + ALLTRIM(TTOC( dateend, 8)) + ".000+0000";/##CHR(13)##//##CHR(10)##/ device = "&deviceUuid=" + УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"", ""Все продажи, хранящиеся в ККМ"" и ""Новые продажи"" ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "";/##CHR(13)##//##CHR(10)##/ device = "?&deviceUuid=" + УИДТЕРМИНАЛА;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("При загрузке данных из облака Эвотор доступен только вариант загрузки ""За период с"", ""Все продажи, хранящиеся в ККМ"" и ""Новые продажи"" ");/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ELSE/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/ //RETURN true;/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!МОЖНОГРУЗИТЬ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Загрузка прервана.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[0] = "SELL";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[1] = "PAYBACK";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[4] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[5] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[6] = "WRITE_OFF";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[8] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[9] = "FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[10] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[14] = "ACCEPT";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[15] = "RETURN";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[16] = "INVENTORY";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[17] = "REVALUATION";/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕОПЕРАЦИЙ[18] = "OPEN_TARE";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[11] = "REGISTER_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[14] = "POSITION_TAX";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[15] = "DISCOUNT_POSITION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[35] = "DISCOUNT_DOCUMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[40] = "PAYMENT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[42] = "DOCUMENT_OPEN";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[45] = "DOCUMENT_CLOSE_FPRINT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[50] = "CASH_INCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[51] = "CASH_OUTCOME";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[55] = "DOCUMENT_CLOSE";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[60] = "FPRINT_X_REPORT";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[61] = "CLOSE_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[62] = "OPEN_SESSION";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕТРАНЗАКЦИЙ[63] = "FPRINT_Z_REPORT";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[0] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[1] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[2] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[3] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[4] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[5] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[6] = "003";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[7] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[8] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[9] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[10] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[11] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[12] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[13] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[14] = "001";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[15] = "055";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[16] = "007";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[17] = "005";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[18] = "046";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[19] = "";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[20] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[0] = "CASH";/##CHR(13)##//##CHR(10)##/СООТВЕТСВИЕОПЛАТ[1] = "CARD";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/v1/inventories/stores/"+УИДМАГАЗИНА+"/documents"+ALLTRIM(period)+ALLTRIM(device);/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/JSONстрока = ПЕРЕКОДИРОВАТЬ(HTTPGET(Соединение, АдресРесурса, "Заголовки"),"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##///MESSAGEBOX( Ответ );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/IF ( ФайлЗагрузки == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл загрузки ''" + ALLTRIM( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ(ФайлЗагрузки, JSONстрока);/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT SPACE( 20 ) AS doctype, SPACE( 30 ) AS saletype, '''' AS docuuid, '''' AS deviceid, '''' AS type, '''' AS commodityName, CONVERT( datetime, '''' ) AS creationDate,'''' AS id, '''' AS userCode, '''' AS userUuid,/##CHR(13)##//##CHR(10)##/CONVERT(datetime, '''') AS closeDate, CONVERT(datetime, '''') AS openDate, '''' AS timezone, '''' AS openUserCode, '''' AS openUserUuid, '''' AS closeUserCode,/##CHR(13)##//##CHR(10)##/'''' AS closeUserUuid, '''' AS sessionUUID, '''' AS sessionNumber, '''' AS number, '''' AS closeResultSum, '''' AS closeSum, '''' AS sum, '''' AS storeUuid, '''' AS completeInventory,/##CHR(13)##//##CHR(10)##/'''' AS version, '''' AS baseDocumentNumber, '''' AS baseDocumentUUID, '''' AS clientName, '''' AS clientPhone, '''' AS couponNumber,/##CHR(13)##//##CHR(10)##/'''' AS alcoholByVolume, '''' AS alcoholProductKindCode, '''' AS balanceQuantity, '''' AS barcode, '''' AS commodityCode, '''' AS commodityUuid, '''' AS commodityType, /##CHR(13)##//##CHR(10)##/'''' AS costPrice, '''' AS fprintSection, '''' AS mark, '''' AS measureName,'''' AS tareVolume,'''' AS price, '''' AS quantity, '''' AS resultPrice,/##CHR(13)##//##CHR(10)##/'''' AS resultSum, '''' AS resultTaxSum, '''' AS tax, '''' AS taxPercent, '''' AS taxRateCode, '''' AS taxSum, '''' AS paymentType, '''' AS rrn, '''' AS documentNumber,/##CHR(13)##//##CHR(10)##/'''' AS receiptNumber, '''' AS proceeds,'''' AS cash,'''' AS collection, '''' AS cashIn,'''' AS cashOut, '''' AS total, '''' AS cashInQuantity, '''' AS cashOutQuantity,/##CHR(13)##//##CHR(10)##/'''' AS revenue, '''' AS sessionSalesResults, '''' AS sessionPurchasesResults, '''' AS nonzeroSumSales, '''' AS nonzeroSumPurchases, '''' AS quantitySalesQuantity,/##CHR(13)##//##CHR(10)##/'''' AS quantitySalesReversal,'''' AS quantitySalesBack, '''' AS reversalBack, '''' AS zreportNumber; SET FMTONLY OFF", "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаИнициализации = "commodityName=''''; ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DocumentTypes = "''SELL'' , ''PAYBACK'' , ''CASH_INCOME'' , ''CASH_OUTCOME'' , ''OPEN_SESSION'' , ''FPRINT'' , ''CLOSE_SESSION'' , ''INVENTORY'' , ''ACCEPT'' , ''RETURN'' , ''WRITE_OFF'' , ''REVALUATION'' , ''OPEN_TARE''";/##CHR(13)##//##CHR(10)##/TransactionTypes = "''DISCOUNT_DOCUMENT'' , ''DISCOUNT_POSITION'' , ''DISCOUNT_DOCUMENT_POSITION'' , ''DOCUMENT_OPEN'' , ''DOCUMENT_CLOSE'' , ''DOCUMENT_CLOSE_FPRINT'' , ''REGISTER_POSITION'' , ''REGISTER_BILLS'' ,/##CHR(13)##//##CHR(10)##/''CASH_INCOME'' , ''CASH_OUTCOME'' , ''INVENTORY'' , ''PAYMENT'' , ''OPEN_SESSION'' , ''CLOSE_SESSION'' , ''FPRINT_OPEN_SESSION'' , ''FPRINT_X_REPORT'' , ''FPRINT_Z_REPORT'' , ''POSITION_TAX'' , ''REVALUATION''";/##CHR(13)##//##CHR(10)##/doctype = "";/##CHR(13)##//##CHR(10)##/saletype = "";/##CHR(13)##//##CHR(10)##/docuuid = "";/##CHR(13)##//##CHR(10)##/Скрипт = "IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + DocumentTypes + " ) ) /##CHR(13)##//##CHR(10)##/ doctype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''type'' AND ВСПИСКЕ( ЗначениеПоля, " + TransactionTypes + " ) ) /##CHR(13)##//##CHR(10)##/ saletype= ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ IF ( ИмяПоля == ''uuid'' AND ЗначениеПоля <> ''null'' )/##CHR(13)##//##CHR(10)##/ docuuid = ЗначениеПоля;/##CHR(13)##//##CHR(10)##/ ЗначениеПоля";/##CHR(13)##//##CHR(10)##///ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт);/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ( "Магазины", "JSON", JSONстрока, СтрокаИнициализации, Скрипт,"","extraKeys");/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "Магазины" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad; /##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокФР" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = КоличествоСтрок( "Магазины" );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##/IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции = VAL(ЗАПРОС("SELECT lasttranscount FROM sprequipment WHERE code = ''" + КодОборудования + "''"));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Магазины");/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Магазины" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ОбщаяСумма = 0;/##CHR(13)##//##CHR(10)##/ Наличность = 0;/##CHR(13)##//##CHR(10)##/ СуммаСмены = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = 0;/##CHR(13)##//##CHR(10)##/ Инкассация = 0;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docuuid = Магазины.docuuid;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если документ пустой - пропускаем /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docuuid ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzCount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АВТОНУМЕРАЦИЯ_ТРАНЗАКЦИЙ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПоследнейТранзакции++;/##CHR(13)##//##CHR(10)##/ tranzCount = НомерПоследнейТранзакции; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzCount = Магазины.id;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ doctype = Магазины.doctype;/##CHR(13)##//##CHR(10)##/ saletype = Магазины.saletype;/##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ tranzType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 63)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСВИЕТРАНЗАКЦИЙ[i] == saletype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = STR(i); //saletype/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( saletype == "INVENTORY" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = Магазины.creationDate;/##CHR(13)##//##CHR(10)##/ ВременнаяЗона = VAL(Магазины.timezone);/##CHR(13)##//##CHR(10)##/ IF (!_НЕУЧИТЫВАТЬВРЕМЕННУЮЗОНУ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДАТАДОКУМЕНТА = ЗАПРОС("SELECT DATEADD(millisecond," + ВременнаяЗона + ", ''" + TTOC(ДАТАДОКУМЕНТА) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ tranzDate = LEFT(TTOC( ДАТАДОКУМЕНТА, 4),10);/##CHR(13)##//##CHR(10)##/ tranzTime = ALLTRIM(TTOC( ДАТАДОКУМЕНТА, 8));/##CHR(13)##//##CHR(10)##/ POSNumber = 1;//Магазины.deviceid;/##CHR(13)##//##CHR(10)##/ chequeNumber = Если(Магазины.receiptNumber=="",0,Магазины.receiptNumber);/##CHR(13)##//##CHR(10)##/ Seller = 0;//GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = Магазины.commodityCode;/##CHR(13)##//##CHR(10)##/ commodityUuid = Магазины.commodityUuid;/##CHR(13)##//##CHR(10)##/ IF (ALLTRIM(wareCode) == "null" OR ПУСТО(wareCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ wareCode = ""; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ paymentType = Магазины.paymentType;/##CHR(13)##//##CHR(10)##/ paymentTypeInt = ЕСЛИ(paymentType=="",0,ЕСЛИ(СООТВЕТСВИЕОПЛАТ[0]==paymentType,0,1));/##CHR(13)##//##CHR(10)##/ AspectsList = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ AspectValue2 = "";/##CHR(13)##//##CHR(10)##/ AspectValue3 = "";/##CHR(13)##//##CHR(10)##/ AspectValue4 = "";/##CHR(13)##//##CHR(10)##/ AspectValue5 = "";/##CHR(13)##//##CHR(10)##/ dockIndCode = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Price = Магазины.price;/##CHR(13)##//##CHR(10)##/ Quantity = Магазины.quantity;/##CHR(13)##//##CHR(10)##/ Наличность = Магазины.cash;/##CHR(13)##//##CHR(10)##/ Инкассация = Магазины.collection;/##CHR(13)##//##CHR(10)##/ СуммаОтчет = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаОтчет = Магазины.revenue;/##CHR(13)##//##CHR(10)##/ СуммаСмены = Магазины.total;/##CHR(13)##//##CHR(10)##/ ВыручкаСмены = Магазины.closeSum;/##CHR(13)##//##CHR(10)##/ zReportNumber = Если(Магазины.zReportNumber=="",0,VAL(Магазины.zReportNumber));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ i=0;/##CHR(13)##//##CHR(10)##/ chequeType = 0;/##CHR(13)##//##CHR(10)##/ While (i <= 18)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СООТВЕТСТВИЕОПЕРАЦИЙ[i] == doctype)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ chequeType = STR(i); //doctype/##CHR(13)##//##CHR(10)##/ dockIndCode = СООТВЕТСВИЕКОДОВДОКУМЕНТОВ[i];/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ i++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("doctype = " + doctype + ". chequeType = " + chequeType + ". dockIndCode = " + dockIndCode);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ecrSession = Магазины.sessionNumber;/##CHR(13)##//##CHR(10)##/ PriceWD = Магазины.resultPrice;/##CHR(13)##//##CHR(10)##/ SummWD = Магазины.resultSum;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = "1";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ exmark = Магазины.mark;/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, ЕСЛИ(Магазины.barcode==''null'' OR Магазины.barcode=="","",Магазины.barcode));/##CHR(13)##//##CHR(10)##/ commodityType = Магазины.commodityType;/##CHR(13)##//##CHR(10)##/ Summ = Магазины.sum;/##CHR(13)##//##CHR(10)##/ currency = 0;/##CHR(13)##//##CHR(10)##/ education = 0;/##CHR(13)##//##CHR(10)##/ commentCode = 0;/##CHR(13)##//##CHR(10)##/ universalNDOK = Магазины.documentNumber;/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (tranztype == "40" AND paymentTypeInt == 0 AND VAL(Summ) < 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranztype == "61" AND sessionclosecount < 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sessionclosecount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закомментировано, т.к. в Эвоторе перестали заполняться номера в тэге zReportNumber /##CHR(13)##//##CHR(10)##/ //IF (tranztype == "63" AND zReportNumber == 0 )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ // CONTINUE;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(chequeNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequeNumber = " + chequeNumber + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(universalNDOK))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ndok = ''" + universalNDOK + "'' WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ecrSession))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ecrSession = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET ksnum = " + STR( VAL( ecrSession ) ) + " WHERE date = ''" + TTOC( ДАТАДОКУМЕНТА ) + "'' AND posnumber = " + STR( posNumber ) + " AND NOT transtype IN (61, 62, 63, 0) " );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF (tranzType == "61")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаСмены);/##CHR(13)##//##CHR(10)##/ kolp = 0;/##CHR(13)##//##CHR(10)##/ summa = VAL(СуммаСмены);/##CHR(13)##//##CHR(10)##/ summasale = VAL(СуммаСмены); /##CHR(13)##//##CHR(10)##/ sessionclosecount = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (tranzType == "63")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WareCode = "";/##CHR(13)##//##CHR(10)##/ wareCode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ //chequeNumber = zReportNumber;/##CHR(13)##//##CHR(10)##/ cena = VAL(ВыручкаОтчет);/##CHR(13)##//##CHR(10)##/ kolp = VAL(Наличность);/##CHR(13)##//##CHR(10)##/ summa = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ summasale = VAL(ОбщаяСумма);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "41" OR tranzType == "40" ) AND paymentTypeInt == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( paymentTypeInt ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> "18", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == "14", "001", IIF( chequeType == "15", "019", IIF( chequeType == "16", "007", IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("docCode = " + docCode);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode )) //AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если продали маркированный табак и нет кода товара в транзакции, то попытаемся определить код по uuid а затем по штрихкоду/##CHR(13)##//##CHR(10)##/ //1. по uuid/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(warecode) AND !ПУСТО(commodityUuid) AND ALLTRIM(commodityType) == "TOBACCO_MARKED")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT maincode FROM sprres WHERE identity_column = (SELECT ic FROM spectree WHERE uniqueid = ''" + ALLTRIM( commodityUuid ) + "'')");/##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //2. по штрихкоду, если не нашли по uuid/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(warecode) AND !ПУСТО(barcode) AND ALLTRIM(commodityType) == "TOBACCO_MARKED")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( exmark ) )/##CHR(13)##//##CHR(10)##/ Штрихкод = VAL( LEFT( ALLTRIM( exmark ),14 ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Штрихкод = barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT maincode FROM sprres WHERE code = (SELECT TOP 1 nn FROM sprnnbc WHERE bc = ''" + Штрихкод + "'')");/##CHR(13)##//##CHR(10)##/ wareCode_org = wareCode;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !СКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "046" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (doccode <> "008")/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ else /##CHR(13)##//##CHR(10)##/ docid = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //удалим из таблицы транзакций данные по загружаемому номеру смены по выбранному оборудованию чтобы не было дублей/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND ECRSession= " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( docdate ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docdate = ДАТАДОКУМЕНТА;//CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype = " + tranzType);/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( docdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber + " AND transtype = " + tranzType ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ SKIP(1, "Магазины")/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(8),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(9),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,CHR(208),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", " "); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"°", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"™", " ");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокПапок" );/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = КОЛИЧЕСТВОСТРОК("СписокПапок");/##CHR(13)##//##CHR(10)##/н=0;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ н++;/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ic + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ //code = ALLTRIM( STR( ABS( ic ) + ЕСЛИ( ic < 0, 2000000000, 1000000000 ) ) ); //код/##CHR(13)##//##CHR(10)##/ //barCodes[0] = ""; //массив штрихкодов/##CHR(13)##//##CHR(10)##/ //alcoCodes[0] = ""; //массив алкокодов/##CHR(13)##//##CHR(10)##/ _name = LEFT( XMLTRANS( ALLTRIM( name )), 100); //наименование/##CHR(13)##//##CHR(10)##/ //price = 0; //цена продажи/##CHR(13)##//##CHR(10)##/ //quantity = 0; //остаток/##CHR(13)##//##CHR(10)##/ //costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ //measureName = ""; //наименование единицы/##CHR(13)##//##CHR(10)##/ //tax = "NO_VAT"; //ставка налога/##CHR(13)##//##CHR(10)##/ allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/ //description = ""; //описание товара/##CHR(13)##//##CHR(10)##/ //articleNumber = ""; //артикул/##CHR(13)##//##CHR(10)##/ hasVariants = "false";/##CHR(13)##//##CHR(10)##/ parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/ group = "true"; //является группой/##CHR(13)##//##CHR(10)##/ //_type = "NORMAL"; //тип товара/##CHR(13)##//##CHR(10)##/ //alcoholByVolume = 0; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ //alcoholProductKindCode = 0; //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ //tareVolume = 0; //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",code,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","[","", false);/##CHR(13)##//##CHR(10)##/ //СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",_name,",",true); /##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,Разделитель,true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"hasVariants",hasVariants,",",false);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,"",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,",",false);/##CHR(13)##//##CHR(10)##/ //ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ IF (н <= КоличествоЭлементов)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (RIGHT(СтрокаТоваров,1) <> ",")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'н=0; /##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(*) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "NO_VAT"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "VAT_10"; //Без 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "VAT_18"; //НДС 18/20%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[7] = "VAT_0"; //НДС 0%/##CHR(13)##//##CHR(10)##/СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'//Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( СтрокаТоваров, Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN СтрокаТоваров = СтрокаТоваров + """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(8),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(9),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ //ТЕКСТ = STRTRAN( ТЕКСТ,CHR(208),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", " "); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"°", " ");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"™", " ");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/GENERATEUUID = false;/##CHR(13)##//##CHR(10)##/IF (f_razr == 1 AND (aspecttype == 2 OR aspecttype == 0))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND f_subres == 0 AND f_hchild == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ GENERATEUUID = true;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/barcodes[0] = "";/##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДескрипторФайла = ФАЙЛОТКРЫТЬ( ИмяФайлаОтправки, 0, 1);/##CHR(13)##//##CHR(10)##///СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/н++;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/uuid = ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprres WHERE code = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')");/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT guid FROM evotorrelations WHERE maincode = ''" + code + "''");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПУСТО(uuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!GENERATEUUID)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ uuid = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO evotorrelations (maincode, guid)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + code + "'', ''" + uuid + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code ); //код/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/_ЕСТЬТИПМАРКИРОВКИ = VAL( ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END") );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname,/##CHR(13)##//##CHR(10)##/ dbo.fn_getalcocodes( sprres.code ) as alcocodes, dbo.fn_getbarcodes_ex( sprres.code ) AS allbarcodes, sprres.nnvid AS nnvid, /##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc AS a_proc, sprres.ed AS ed, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark, " + ЕСЛИ(_ЕСТЬТИПМАРКИРОВКИ==1, "sprres.markgroup", "0") + " AS markgroup,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ТоварИнфо.markgroup;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВСКРЫТИЕТАРЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РазливнойАлко = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mName = XMLTRANS( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name ) );/##CHR(13)##//##CHR(10)##/mNameVT = XMLTRANS( ALLTRIM( name ) );/##CHR(13)##//##CHR(10)##/mCname = XMLTRANS( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), ТоварИнфо.shortname ) ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCnameVT = XMLTRANS( ALLTRIM( cname ) ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = ТоварИнфо.d_litr;/##CHR(13)##//##CHR(10)##/mAProc = ТоварИнфо.a_proc;/##CHR(13)##//##CHR(10)##/alcoCodes[0] = ТоварИнфо.alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##/barcodes[0] = ТоварИнфо.allbarcodes;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ПИВОКАКТОВАР AND ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ mNNVid = "";/##CHR(13)##//##CHR(10)##/ mAProc = "";/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_АЛКОГОЛЬКАКТОВАР AND mAlco)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ mNNVid = "";/##CHR(13)##//##CHR(10)##/ mAProc = "";/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (_ПИВОБЕЗАЛКОКОДА == true)/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "SERVICE";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TOBACCO_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 1520 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "SHOES_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 3 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "MEDICINE_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9998 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "LIGHT_INDUSTRY_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9997 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TYRES_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9996 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "PHOTOS_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9995 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "PERFUME_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9994 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "TOBACCO_PRODUCTS_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( ТипМаркировки ) AND VAL(ТипМаркировки) == 9993 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = "DAIRY_MARKED";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL_NOT_MARKED", ЕСЛИ(mAlco AND !РазливнойАлко,"ALCOHOL_MARKED","NORMAL")); //тип товара/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/price = ALLTRIM( STR( cena, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/priceVT = 0;/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ priceVT = ALLTRIM( STR( cena * mVolume, 8, 2 )); //цена продажи/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/quantity = ALLTRIM( STR( kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/quantityVT = 0;/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ quantityVT = ALLTRIM( STR( kolp / mVolume, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/// Единица измерения/##CHR(13)##//##CHR(10)##/measureName = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЕДИНИЦУ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mEdn = ЗАПРОС( "SELECT ed FROM sprres WHERE maincode= ''" + mCode + "''" );/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДопустимыхЕдиниц,mEdn) <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = mEdn; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ measureName = "шт";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fractqty)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ measureName = "кг"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT ntype FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + kodn + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( КодНалогаККМ )], "NO_VAT"); //налоги/##CHR(13)##//##CHR(10)##/allowToSell = "true"; //разрешен к продаже/##CHR(13)##//##CHR(10)##/description = mCname; //описание товара/##CHR(13)##//##CHR(10)##/articleNumber = XMLTRANS ( ALLTRIM(article) ); //артикул/##CHR(13)##//##CHR(10)##/parentUuid = ALLTRIM( ЕСЛИ( EMPTY( parent ), "", ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = " + ABS( parent ) + " AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')") ) ); //ид родительской папки/##CHR(13)##//##CHR(10)##/group = "false"; //является ли группой/##CHR(13)##//##CHR(10)##/alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/IF (н > 1) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##///тэги/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",uuid,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",mCode,",",true);/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(barcodes[0]))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barcodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(alcoCodes[0]) AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",mName,",",true); /##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/IF (_type <> "SERVICE")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantity,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName",measureName,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell",allowToSell,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description",description,",",true);/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( articleNumber ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type",_type,"",true);/##CHR(13)##//##CHR(10)##/IF (mAlco AND !РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##///IF (н < КоличествоЭлементов)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// СтрокаТоваров = СтрокаТоваров +","; /##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##/IF (РазливнойАлко)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT guid FROM EvotorRelations WHERE maincode=''"+STDF(mCode)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(_ТоварУИД))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТоварУИД = ЗАПРОС("SELECT NEWID()");/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO EvotorRelations (maincode, guid) VALUES (''"+STDF(code)+"'',''"+STDF(_ТоварУИД)+"'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "{";/##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"uuid",_ТоварУИД,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"code",STR( VAL( mCode ) + 90000000 ),",",true);/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(barcodes[0]) AND _ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"barCodes","["""+STRTRAN(barcodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoCodes","["""+alcoCodes[0]+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"name",mNameVT,",",true); /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"price",priceVT,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"quantity",quantityVT,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"costPrice",costPrice,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"measureName","шт",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tax",tax,",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"allowToSell","false",",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"description","для вскрытия тары",",",true);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"articleNumber",articleNumber,",",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(parentUuid))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"parentUuid",parentUuid,",",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"group",group,",",false);/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"type","ALCOHOL_MARKED","",true);/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholByVolume",alcoholByVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"alcoholProductKindCode",alcoholProductKindCode,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",";/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТЭГ(СтрокаТоваров,2,"tareVolume",tareVolume,"",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "}";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'СтрокаТоваров = СтрокаТоваров + "]"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "]");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "Content-Encoding:gzip";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "X-Authorization:"+Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Заголовки[] = "Content-Length:"+ФАЙЛРАЗМЕР(ДескрипторФайла);/##CHR(13)##//##CHR(10)##///Заголовки[] = "Accept: application/json";/##CHR(13)##//##CHR(10)##///Заголовки[] = "Charset:UTF-8";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресРесурса = "/api/v1/inventories/stores/" + УИДМАГАЗИНА + "/products";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Соединение = HTTPСоединить( "https://api.evotor.ru" );/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в облако Эвотор");/##CHR(13)##//##CHR(10)##/IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://api.evotor.ru", 443, true);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с облаком Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/IF (Ответ == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в облако Эвотор''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/Соединение = false;/##CHR(13)##//##CHR(10)##///IF (_ВЕСТИЛОГ)/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///чистим массивы с заголовками запросов/##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##/Заголовки[4] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SET FMTONLY ON SELECT '''' AS code, '''' AS reason, '''' AS subject, '''' AS value SET FMTONLY OFF","Ошибки");/##CHR(13)##//##CHR(10)##/ЗАГРУЗИТЬ("Ошибки","JSON",Ответ1);/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("Ошибки" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##/СтрокаОшибок = "";/##CHR(13)##//##CHR(10)##/WHILE (!КОНЕЦКОНТЕКСТА( "Ошибки" ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ALLTRIM(Ошибки.code);/##CHR(13)##//##CHR(10)##/ ПричинаОшибки = ALLTRIM(Ошибки.reason);/##CHR(13)##//##CHR(10)##/ ОбъектОшибки = ALLTRIM(Ошибки.subject);/##CHR(13)##//##CHR(10)##/ ЗначениеОшибка = ALLTRIM(Ошибки.value);/##CHR(13)##//##CHR(10)##/ СтрокаОшибок = СтрокаОшибок + " Код ошибки: " + КодОшибки + ". Причина ошибки: " + ПричинаОшибки + ". Объект ошибки: " + ОбъектОшибки + ". Недопустимое значение: " + ЗначениеОшибка; /##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("Ошибки");/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(Ответ1))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( Ответ1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаОшибок))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MESSAGEBOX( СтрокаОшибок );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВЕСТИЛОГ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = _ЭВОТОР_ВЕСТИЛОГ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВЕСТИЛОГ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВЕСТИЛОГ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ПИВОКАКТОВАР" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = _ЭВОТОР_ПИВОКАКТОВАР;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПИВОКАКТОВАР = ВЫЧИСЛИТЬ("_ЭВОТОР_ПИВОКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ВСКРЫТИЕТАРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = _ЭВОТОР_ВСКРЫТИЕТАРЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВСКРЫТИЕТАРЫ = ВЫЧИСЛИТЬ("_ЭВОТОР_ВСКРЫТИЕТАРЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ") == "U" )/##CHR(13)##//##CHR(10)##/_ЭВОТОР_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_АЛКОГОЛЬКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_АЛКОГОЛЬКАКТОВАР" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = _ЭВОТОР_АЛКОГОЛЬКАКТОВАР;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _АЛКОГОЛЬКАКТОВАР = ВЫЧИСЛИТЬ("_ЭВОТОР_АЛКОГОЛЬКАКТОВАР"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ЭВОТОР_ПИВОБЕЗАЛКОКОДА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ЭВОТОР_ПИВОБЕЗАЛКОКОДА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = _ЭВОТОР_ПИВОБЕЗАЛКОКОДА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПИВОБЕЗАЛКОКОДА = ВЫЧИСЛИТЬ("_ЭВОТОР_ПИВОБЕЗАЛКОКОДА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'11.05.2022 22:16:48') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными между Айтида и Эвотор v.3.9.7','ККМ',0.00000000,'',0.00000000,7489.00000000,0,'',0.00000000,'','',0,'432D40AA-EC2D-4FC8-ACF8-36B54619BC8E',0,1,0,'11.05.2022 22:16:56') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.16.0 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.16.0 #code 0000000200 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2022 22:17:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'11.05.2022 22:17:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) <> "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) == "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( spec.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЦенаСклада = СписокТоваров.ЦенаСклада;/##CHR(13)##//##CHR(10)##/ IF (!_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ AND ЦенаСклада == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( АлкоКодВ ) >= 500 OR ВСПИСКЕ( VAL( АлкоКодВ ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товара: " + Наименование + " с кодом " + КодТовара + ". Загрузка товаров прервана" );/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "001" OR СписокДокументов.code == "002" OR СписокДокументов.code == "003" OR СписокДокументов.code == "005"/##CHR(13)##//##CHR(10)##/ OR СписокДокументов.code == "007" OR СписокДокументов.code == "019" OR СписокДокументов.code == "045" OR СписокДокументов.code == "055" OR СписокДокументов.code == "MRK" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ИДДОКУМЕНТА;/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="003")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code == "MRK") //Маркировка - приёмка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ СкладКуда = ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяСкладаОткуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладОткуда + "''");/##CHR(13)##//##CHR(10)##/ ИмяСкладаКуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладКуда + "''");/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаОткуда", ИмяСкладаОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаКуда", ИмяСкладаКуда); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column, (SELECT TOP 1 boxnumber FROM barcodes bc WHERE bc.code = ''" + СписокДокументов.code + "'' AND bc.ic = spec.ic AND bc.spec_ic = spec.identity_column) AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode, boxnumber FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Марки.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ //шк коробки/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИмяПоляСЦеной) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Спецификация.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes_ex( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'11.05.2022 22:17:06') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments,inDocuments_Sbor, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, СкладПолучатель, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки, КОЛВОДОКСБОРШК, indexS;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##/СкладПолучатель = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "MRK")/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ИДВНУТРЕННИЙДОК;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="MRK") //Проверка маркировки/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///добавим "СборШК" в список возвращаемых документов/##CHR(13)##//##CHR(10)##/КолВоДокСборШК = 0;/##CHR(13)##//##CHR(10)##/IF (docType <> "СборШК" AND !ПУСТО(docType))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //получение завершенных документов "СборШК" с сервера/##CHR(13)##//##CHR(10)##/ inDocuments_Sbor = connector.GetDocuments("СборШК", checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/ КолВоДокСборШК = inDocuments_Sbor.Count;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDocSbor = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDocSbor < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DocumentSbor = inDocuments_Sbor.Item(IndexDocSbor);/##CHR(13)##//##CHR(10)##/ inDocuments.Add(DocumentSbor);/##CHR(13)##//##CHR(10)##/ IndexDocSbor++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/Document = "";/##CHR(13)##//##CHR(10)##/Document_sbor = "";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##///IF (КолВоДок==0 AND КолВоДокСборШК==0)/##CHR(13)##//##CHR(10)##/IF ( КолВоДок==0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document) >= 0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //СборШК/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(9000 + IndexDoc + 1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments_Sbor.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments_Sbor.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments_Sbor.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments_Sbor.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы:"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КолВоДокСборШК > 0 AND Загружаем==false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE(inDocuments_Sbor) <> "U")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments_Sbor.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ //Склады из документа - начало/##CHR(13)##//##CHR(10)##/ СкладОткуда = Document.GetField("ИдСклада1СОткуда");/##CHR(13)##//##CHR(10)##/ СкладКуда = Document.GetField("ИдСклада1СКуда");/##CHR(13)##//##CHR(10)##/ СкладДокумента = Document.GetField("ИдСклада1С");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладОткуда) AND TYPE(СкладОткуда)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладОткуда;/##CHR(13)##//##CHR(10)##/ ELSE IF (!ПУСТО(СкладДокумента) AND TYPE(СкладДокумента)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладДокумента; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладКуда) AND TYPE(СкладКуда)<>''L'')/##CHR(13)##//##CHR(10)##/ СкладПолучатель = СкладКуда;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //склады из документа - конец/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК" OR Document.DocumentTypeName == "Инвентаризация") //если сканировали через Сбор Штрихкодов или инвентаризацию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // произведем изменение товара, чтобы данные по нему передались в РМК/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE sprres SET ex_code = ex_code WHERE code = ''" + Товар + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, sklad_d, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + СкладПолучатель + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК++;/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'11.05.2022 22:17:06') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.16.0','ТСД',0.00000000,'',0.00000000,7482.00000000,0,'',0.00000000,'','',0,'70BF76EF-0C5F-4E33-99D4-EA8190BD4A0D',0,1,0,'11.05.2022 22:17:06') #begin #description Платежная система ЭМУЛЯТОР #name Платежная система ЭМУЛЯТОР #code 0000000216 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1463.00000000,'//Список отчетов ПС/##CHR(13)##//##CHR(10)##/RETURN "ПС Эмулятор: Сверка итогов|50";',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/RETURN "Эмулятор платежной системы";',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'//Выполнить оплату/##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( "Авторизация платежной системы." + СимвПС +/##CHR(13)##//##CHR(10)##/ "НОМЕРССЫЛКИ = " + НОМЕРССЫЛКИ, ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определяем тип чека/##CHR(13)##//##CHR(10)##/ТипЧекаАйтида = ФР.ПС_ПолучитьТипЧекаПоОперации();/##CHR(13)##//##CHR(10)##///если чек не входит в список допустимых операций, для которых можно провести банковскую авторизацию, то ничего не выполняем/##CHR(13)##//##CHR(10)##/IF ( !ВСПИСКЕ(ТипЧекаАйтида, 0, 1, 6) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимая операция", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ Вопрос = "Авторизация по платежной системе на сумму " + STR( _ККТСУММАБЕЗНАЛ, 15, 2 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Авторизация прошла успешно?"; /##CHR(13)##//##CHR(10)##/ Ответ = СООБЩЕНИЕ( Вопрос, ФР.ПСИМЯОБОРУДОВАНИЯ(), 4 );/##CHR(13)##//##CHR(10)##/ IF ( Ответ == 6 )/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не определена сумма оплаты по платежной системе", ФР.ИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1435.00000000,'//Закрытие смены в ПС/##CHR(13)##//##CHR(10)##/Вопрос = "Успешное закрытие смены платежной системы?"; /##CHR(13)##//##CHR(10)##/Ответ = СООБЩЕНИЕ( Вопрос, ФР.ПСИМЯОБОРУДОВАНИЯ(), 4 );/##CHR(13)##//##CHR(10)##/IF ( Ответ == 6 )/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ Результат = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN Результат; ',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Расчет суммы оплаты. СУММАКОПЛАТЕ = " + STR( СУММАКОПЛАТЕ, 16, 2 ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НОМЕРФР ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //возвращаем сумму позиций с номером ФР, совпадающие с кодом ФР в карточке платежной системы/##CHR(13)##//##CHR(10)##/ //сюда же плюсуем сумму позиций, для которых код ФР не задан (продажа по свободной цене, аванс, предоплата)/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕФР[ НОМЕРФР ] + СУММАКОПЛАТЕФР[ 0 ];/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN _ККТСУММАБЕЗНАЛ;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1475.00000000,'//Окончание работы с ПС/##CHR(13)##//##CHR(10)##/',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/PUBLIC _ККТСУММАБЕЗНАЛ;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/РезультатОтмены = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вопрос = "Отмена оплаты по платежной системе на сумму " + STR( _ККТСУММАБЕЗНАЛ, 15, 2 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Отмена прошла успешно?";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ответ = СООБЩЕНИЕ( Вопрос, ФР.ПСИМЯОБОРУДОВАНИЯ(), 4 );/##CHR(13)##//##CHR(10)##/IF ( Ответ == 6 )/##CHR(13)##//##CHR(10)##/ РезультатОтмены = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ РезультатОтмены = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN РезультатОтмены;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1462.00000000,'//Печать отчетов ПС/##CHR(13)##//##CHR(10)##/Результат = true;/##CHR(13)##//##CHR(10)##/IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Вопрос = "Успешная печать сверки итогов платежной системы?"; /##CHR(13)##//##CHR(10)##/ Ответ = СООБЩЕНИЕ( Вопрос, ФР.ПСИМЯОБОРУДОВАНИЯ(), 4 );/##CHR(13)##//##CHR(10)##/ IF ( Ответ == 6 )/##CHR(13)##//##CHR(10)##/ Результат = true;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Результат = false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "Эмулятор: платежная система";',0,0,1,0,'17.05.2022 18:44:39') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Платежная система ЭМУЛЯТОР','ПС',0.00000000,'Профиль для работы с платежной системой в режиме эмуляции. Совместим с Айтида начиная с версии 4.4.5',0.00000000,7524.00000000,0,'',0.00000000,'','',0,'76C512BA-0691-4AB7-AFBC-D20589F7113E',0,1,0,'17.05.2022 18:44:39') #begin #description Профиль обмена с ТСД АТОЛ Mark.Scan #name Профиль обмена с ТСД АТОЛ Mark.Scan #code 0000000217 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "АТОЛ MARK.SCAN";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'20.07.2022 23:13:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##/RETURN RESTAPI.МАРКСКАН_СвойстваДрайвера( КОДОБОРУДОВАНИЯ );',0,0,1,0,'20.07.2022 23:13:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'//Обработка выгрузки данных в ТСД/##CHR(13)##//##CHR(10)##/RETURN RESTAPI.МАРКСКАН_ОбработкаВыгрузкиДанныхВТСД( КОДОБОРУДОВАНИЯ );',0,0,1,0,'20.07.2022 23:13:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/RETURN RESTAPI.МАРКСКАН_ОбработкаЗагрузкиДанныхИзТСД( КОДОБОРУДОВАНИЯ, ПРИЗНАКОЧИСТКИТСД );',0,0,1,0,'20.07.2022 23:13:19') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'20.07.2022 23:13:19') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль обмена с ТСД АТОЛ Mark.Scan','ТСД',0.00000000,'Профиль обмена с ПО АТОЛ Mark.Scan для терминалов сбора данных. Совместим с Айтида начиная с версии 4.4.6. Используется интеграция по REST API.',0.00000000,7504.00000000,0,'',0.00000000,'','',0,'C2B90E17-B695-4039-B89F-09E60817E950',0,1,0,'28.07.2022 11:26:41') #begin #description Платежная система АТОЛ #name Платежная система АТОЛ #code 0000000214 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1460.00000000,'//Свойства драйвера ПС/##CHR(13)##//##CHR(10)##/ФР.ПСАТОЛ_СвойстваДрайвера();',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1462.00000000,'//Печать отчетов ПС/##CHR(13)##//##CHR(10)##/IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФР.ПСАТОЛ_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1463.00000000,'//Список отчетов ПС/##CHR(13)##//##CHR(10)##/RETURN "ПС АТОЛ: Сверка итогов|50";',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/ИмяУстройства = "ПС АТОЛ " + КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN ИмяУстройства;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DriverPayCard.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN DriverPayCard.CurrentDeviceName;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN DriverPayCard.DeviceCount;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1475.00000000,'//Окончание работы с ПС/##CHR(13)##//##CHR(10)##/DriverPayCard = false;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'//Выполнить оплату/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определяем тип чека/##CHR(13)##//##CHR(10)##/ТипЧекаАйтида = ФР.ПС_ПолучитьТипЧекаПоОперации();/##CHR(13)##//##CHR(10)##///если чек не входит в список допустимых операций, для которых можно провести банковскую авторизацию, то ничего не выполняем/##CHR(13)##//##CHR(10)##/IF ( !ВСПИСКЕ(ТипЧекаАйтида, 0, 1, 6) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимая операция", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( НОМЕРУСТРОЙСТВА );/##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ROUND( _ККТСУММАБЕЗНАЛ, 2);/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( НОМЕРССЫЛКИ ) )/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = НОМЕРССЫЛКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ФР.ПСАТОЛ_ВыполнитьИСохранитьАвторизацию( ТипЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не определена сумма оплаты по платежной системе", ФР.ИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/РезультатОтмены = true;/##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось создать объект драйвера платежных систем." + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Проверьте корректность установки драйвера.", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( НОМЕРУСТРОЙСТВА ); /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ //DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = _ККТСУММАБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ //DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ФР.ПСАТОЛ_ВыполнитьИСохранитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ РезультатОтмены = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось определить сумму для отмены банковской транзакции", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатОтмены;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1435.00000000,'//Закрытие смены в ПС/##CHR(13)##//##CHR(10)##/RETURN ФР.ПСАТОЛ_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() );',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = 36;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "АТОЛ: Драйвер платежных систем";',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Расчет суммы оплаты. СУММАКОПЛАТЕ = " + STR( СУММАКОПЛАТЕ, 16, 2 ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НОМЕРФР ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //возвращаем сумму позиций с номером ФР, совпадающие с кодом ФР в карточке платежной системы/##CHR(13)##//##CHR(10)##/ //сюда же плюсуем сумму позиций, для которых код ФР не задан (продажа по свободной цене, аванс, предоплата)/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕФР[ НОМЕРФР ] + СУММАКОПЛАТЕФР[ 0 ];/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN _ККТСУММАБЕЗНАЛ;',0,0,1,0,'29.07.2022 14:31:29') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Платежная система АТОЛ','ПС',0.00000000,'Профиль для работы с платежными системами через драйвер платежных систем Атол. Драйвер входит в состав платного программного пакета Frontol Driver Unit. Совместим с Айтида начиная с версии 4.4.5',0.00000000,7503.00000000,0,'',0.00000000,'','',0,'1C02C61F-3F08-4FFB-B8B5-A5E8D2DD9D9C',0,1,0,'29.07.2022 14:31:29') #begin #description RESTAPI. Обмен с Frontol Alco Unit #name RESTAPI. Обмен с Frontol Alco Unit #code 0000000219 #parent Системные #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'01.09.2022 11:18:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'01.09.2022 11:18:28') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Полная выгрузка товаров в ККМ./##CHR(13)##//##CHR(10)##/RETURN RESTAPI.ALCOUNIT_ВЫГРУЗИТЬДАННЫЕ(ТОВАРЫ, КОДДОКУМЕНТА, ИДДОКУМЕНТА, СПИСОКДОКУМЕНТОВ, КОДОБОРУДОВАНИЯ);',0,0,1,0,'01.09.2022 11:18:28') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','RESTAPI. Обмен с Frontol Alco Unit','ККМ',0.00000000,'',0.00000000,6291.00000000,0,'',0.00000000,'','',0,'B5D66F2D-9B98-40BF-B0B7-C48825082A33',0,1,0,'21.07.2023 9:06:53') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10) #code 0000000189 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.05";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( false );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.05, ДТО 10)','ФР',0.00000000,'',0.00000000,5983.00000000,0,'',0.00000000,'','',0,'7F45FB0C-39AF-48B6-944C-891F4CC4CBCF',0,1,0,'28.09.2022 12:19:02') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10) #code 0000000195 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',97.00000000,'//Новый документ./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НовыйДокумент( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( false );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',138.00000000,'//Проверка кода маркировки./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОбработатьКМ( ФР.КОДОБОРУДОВАНИЯ(), КОДМАРКИРОВКИ);',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Атол с поддержкой работы по ФФД 1.2./##CHR(13)##//##CHR(10)##/Совместимо с версией Айтида 4.3.8 и выше.',0.00000000,7436.00000000,0,'',0.00000000,'','',0,'4853CA00-C63B-4F69-8747-4D67D59E0E22',0,1,0,'28.09.2022 12:19:02') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система АТОЛ) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система АТОЛ) #code 0000000196 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "ПСАТОЛ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',97.00000000,'//Новый документ./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НовыйДокумент( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "ПСАТОЛ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "ПСАТОЛ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "ПСАТОЛ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( true );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',138.00000000,'//Проверка кода маркировки./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОбработатьКМ( ФР.КОДОБОРУДОВАНИЯ(), КОДМАРКИРОВКИ);',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система АТОЛ)','ФР',0.00000000,'',0.00000000,7437.00000000,0,'',0.00000000,'','',0,'21689831-62F4-4CF7-A190-0E80836D21E4',0,1,0,'28.09.2022 12:19:02') #begin #description Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система СБЕРБАНК) #name Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система СБЕРБАНК) #code 0000000197 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'RETURN ФР.АТОЛДТО10_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_СписокРазрешенныхОтчетов( true );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "СБЕРБАНК" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "АТОЛДТО10" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФР.АТОЛДТО10_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',138.00000000,'//Проверка кода маркировки./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОбработатьКМ( ФР.КОДОБОРУДОВАНИЯ(), КОДМАРКИРОВКИ);',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ДеактивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',97.00000000,'//Новый документ./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_НовыйДокумент( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'/##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ(), ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Регистрация( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_Возврат( ВерсияФФД );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ЗакрытиеЧека( "СБЕРБАНК" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "СБЕРБАНК" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "СБЕРБАНК" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/RETURN ФР.АтолДТО10_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##/RETURN ФР.АТОЛДТО10_ПризнакНаличияОшибки();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Атол (ФН, ФФД 1.2, ДТО 10, Платежная система СБЕРБАНК)','ФР',0.00000000,'',0.00000000,7438.00000000,0,'',0.00000000,'','',0,'14DDC059-F761-440D-AEF0-2BADCBA73F80',0,1,0,'28.09.2022 12:19:02') #begin #description Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.05, INECRMAN) #name Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.05, INECRMAN) #code 0000000190 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ДеактивацияФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///RETURN ФР.МЕРКУРИЙФР_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Внесение денежной суммы./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денежной суммы./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Печать чека из ПКО./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Печать чека из РКО./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##/RETURN ФР.МеркурийФР_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_СписокРазрешенныхОтчетов( false );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'//ШиринаЛенты./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегистрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_КоличествоУстройств();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Регистрация();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Возврат();',0,0,1,0,'28.09.2022 12:19:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.05, INECRMAN)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов Меркурий производства компании Инкотекс с поддержкой работы по ФФД 1.0.5./##CHR(13)##//##CHR(10)##/Совместимо с версией Айтида 4.3.8 и выше.',0.00000000,7408.00000000,0,'',0.00000000,'','',0,'4D2BDC07-F085-4284-A30B-C59B18C231D4',0,1,0,'28.09.2022 12:19:02') #begin #description Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.2, INECRMAN) #name Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.2, INECRMAN) #code 0000000209 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денежной суммы./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВыплатаДенежнойСуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'//Суммовая наценка ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'//Суммовая скидка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',97.00000000,'//Новый документ./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_НовыйДокумент( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'//Закрытие чека./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'//Отмена чека./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОтменаЧека( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'//Оплата со сдачей./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ЗакрытиеЧека("");',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_СписокРазрешенныхОтчетов( false );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ПечатьПречека();',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',138.00000000,'//Проверка кода маркировки./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОбработатьКМ( ФР.КОДОБОРУДОВАНИЯ(), КОДМАРКИРОВКИ);',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//Открыть чек./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОткрытиеЧекаФР( ФР.КОДОБОРУДОВАНИЯ( ), ВерсияФФД );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'//ШиринаЛенты./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ШиринаЛенты( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_XОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ZОтчет( ФР.КОДОБОРУДОВАНИЯ( ), FROperator, "" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегистрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_КоличествоУстройств();',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',135.00000000,'//Печать чека из расходной накладной./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзРН( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Внесение денежной суммы./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВнесениеДенежнойсуммы( ФР.КОДОБОРУДОВАНИЯ( ), Сумма, froperator );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_АктивацияФР( );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'//Регистрация./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Регистрация( ВерсияФФД );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'//Возврат./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Возврат( ВерсияФФД );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'//Процентная наценка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'//Процентная скидка./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_Прочиеотчеты( ФР.КОДОБОРУДОВАНИЯ( ), ТипОтчета, FROPERATOR, "" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##/RETURN ФР.МеркурийФР_СтатусККТ( ФР.КОДОБОРУДОВАНИЯ( ), КодСтатуса );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ДеактивацияФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_ОкончаниеРаботы( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',136.00000000,'//Печать чека из возврата от покупателя./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзВозвратаПокупателя( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',137.00000000,'//Печать чека из прочих документов./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИзПрочихДокументов( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ВозрастФН( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Печать чека из ПКО./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗПКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Печать чека из РКО./##CHR(13)##//##CHR(10)##/ВерсияФФД = "1.2";/##CHR(13)##//##CHR(10)##/RETURN ФР.ПечатьЧекаИЗРКО( ФР.КОДОБОРУДОВАНИЯ( ), @ИДДокумента, "МЕРКУРИЙ" );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_НомерСменыФР( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_НомерЧекаФР( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##/RETURN ФР.МЕРКУРИЙФР_ОткрытиеСменыФР( ФР.КОДОБОРУДОВАНИЯ( ), FROperator );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///RETURN ФР.МЕРКУРИЙФР_ОткрытиеДенежногоЯщика( ФР.КОДОБОРУДОВАНИЯ( ) );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##/ФР.МЕРКУРИЙФР_ИнициализацияФР( ФР.КОДОБОРУДОВАНИЯ( ), НомерУстройства );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Библиотека ФР. Профиль ФР Меркурий (Инкотекс) (ФН, ФФД 1.2, INECRMAN)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов Меркурий производства компании Инкотекс с поддержкой работы по ФФД 1.2./##CHR(13)##//##CHR(10)##/Совместимо с версией Айтида 4.4.5 и выше.',0.00000000,7498.00000000,0,'',0.00000000,'','',0,'7DFC27EA-1147-4716-878B-70C7736D10ED',0,1,0,'28.09.2022 12:19:03') #begin #description Платежная система Arcus2 #name Платежная система Arcus2 #code 0000000218 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1475.00000000,'//Окончание работы с ПС/##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'//Выполнить оплату/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определяем тип чека/##CHR(13)##//##CHR(10)##/ТипЧекаАйтида = ФР.ПС_ПолучитьТипЧекаПоОперации();/##CHR(13)##//##CHR(10)##///если чек не входит в список допустимых операций, для которых можно провести банковскую авторизацию, то ничего не выполняем/##CHR(13)##//##CHR(10)##/IF ( !ВСПИСКЕ(ТипЧекаАйтида, 0, 1, 6) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид операции", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КодОперацииАркус = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧекаАйтида == 0 OR ТипЧекаАйтида == 6 )/##CHR(13)##//##CHR(10)##/ КодОперацииАркус = 1;/##CHR(13)##//##CHR(10)##/ELSE IF ( ТипЧекаАйтида == 1 )/##CHR(13)##//##CHR(10)##/ КодОперацииАркус = 3;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Недопустимый вид операции", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодОперацииАркус == 0 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не определен вид операции платежной системы", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ IF ( !ФР.ПСАРКУС_ВыполнитьИСохранитьАвторизацию( КодОперацииАркус, ROUND( 100*_ККТСУММАБЕЗНАЛ, 0), ПЕРЕМЕННАЯ("НОМЕРССЫЛКИ",""), "643" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не определена сумма оплаты по платежной системе", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = 36;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Расчет суммы оплаты. СУММАКОПЛАТЕ = " + STR( СУММАКОПЛАТЕ, 16, 2 ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НОМЕРФР ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //возвращаем сумму позиций с номером ФР, совпадающие с кодом ФР в карточке платежной системы/##CHR(13)##//##CHR(10)##/ //сюда же плюсуем сумму позиций, для которых код ФР не задан (продажа по свободной цене, аванс, предоплата)/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕФР[ НОМЕРФР ] + СУММАКОПЛАТЕФР[ 0 ];/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN _ККТСУММАБЕЗНАЛ;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/РезультатОтмены = true;/##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодОперацииАркус = 4;/##CHR(13)##//##CHR(10)##/ IF ( !ФР.ПСАРКУС_ВыполнитьИСохранитьАвторизацию( КодОперацииАркус, ROUND( 100*_ККТСУММАБЕЗНАЛ, 0), ПЕРЕМЕННАЯ("НОМЕРССЫЛКИ",""), "643" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось определить сумму для отмены банковской транзакции", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатОтмены;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1435.00000000,'//Закрытие смены в ПС/##CHR(13)##//##CHR(10)##/RETURN ФР.ПСАРКУС_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() );',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "ARCUS2";',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1460.00000000,'//Свойства драйвера ПС/##CHR(13)##//##CHR(10)##/ФР.ПСАРКУС_СвойстваДрайвера();',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1462.00000000,'//Печать отчетов ПС/##CHR(13)##//##CHR(10)##/IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/ ФР.ПСАРКУС_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1463.00000000,'//Список отчетов ПС/##CHR(13)##//##CHR(10)##/RETURN "Arcus2: Сверка итогов|50";',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/ИмяУстройства = "Arcus2 " + КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИмяУстройства;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Платежная система Arcus2','ПС',0.00000000,'Профиль для работы с платежными системами Arcus2 (прямая интеграция через CommandLineTools). Драйвер должен быть установлен по пути C:\Arcus2. Совместим с Айтида начиная с версии 4.4.6',0.00000000,7535.00000000,0,'',0.00000000,'','',0,'2513691E-92D8-45BE-A623-AB8C3F03A240',0,1,0,'28.09.2022 12:19:03') #begin #description Профиль ТСД Data Mobile v.2.2 #name Профиль ТСД Data Mobile v.2.2 #code 0000000221 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ //СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.2','ТСД',0.00000000,'',0.00000000,7540.00000000,0,'',0.00000000,'','',0,'2656616B-397B-4BB4-AAF8-589953BAE408',0,1,0,'28.09.2022 12:19:03') #begin #description Профиль ТСД Data Mobile v.2.2 (с созданием новых товаров) #name Профиль ТСД Data Mobile v.2.2 (с созданием новых товаров) #code 0000000222 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##/СОЗДАВАТЬТОВАРЫ = true; //признак необходимости создания товаров, если не нашли в базе при загрузке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если в идентификаторе товара встретили dm то товар был создан на ТСД/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND ATC(КодТовара,"dm") > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СОЗДАНИЕ ТОВАРОВ/##CHR(13)##//##CHR(10)##/ IF ( СОЗДАВАТЬТОВАРЫ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПАПКАДЛЯНОВЫХТОВАРОВ = ЗАПРОС("SELECT identity_column FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND name = ''Справочник''");/##CHR(13)##//##CHR(10)##/ КОДНАЛОГА = ЗАПРОС( "SELECT value FROM param WHERE param = ''kodn''" );/##CHR(13)##//##CHR(10)##/ ЕДИНИЦАИЗМЕРЕНИЯ = "шт";/##CHR(13)##//##CHR(10)##/ КОДГРУППЫРЕСУРСОВ = "";/##CHR(13)##//##CHR(10)##/ МИНИМАЛЬНЫЙОСТАТОК = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬ = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАН = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАНЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ // Добвляем новый товар в нужную папку/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "INSERT INTO sprres ( code, maincode, name, shortname, alcocode, cat, kodn, note, ccgroup, group_, parent,/##CHR(13)##//##CHR(10)##/ ed, min_, lossrealization, lossstore, lossreal_val, lossstore_val )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ '''', dbo.fn_getnextmaincode( ), ''" + Наименование + "'', ''" + Наименование + "'', ''" + АлкоКод + "'', ''001'', ''" + КОДНАЛОГА + "'', ''Товар добавлен при загрузке из ТСД'',/##CHR(13)##//##CHR(10)##/ ''0000000001'', ''" + КОДГРУППЫРЕСУРСОВ + "'', " + ПАПКАДЛЯНОВЫХТОВАРОВ + ", ''" + ЕДИНИЦАИЗМЕРЕНИЯ + "'', " + STR( МИНИМАЛЬНЫЙОСТАТОК, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ''" + ЕСТУБЫЛЬ + "'', ''" + ЕСТУБЫЛЬХРАН + "'', " + STR( ЕСТУБЫЛЬЗНАЧ, 16 ,2 ) + ", " + STR( ЕСТУБЫЛЬХРАНЗНАЧ, 16, 2 ) + " ) " );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE identity_column = " + ИДТовара );/##CHR(13)##//##CHR(10)##/ //запишем штрихкод/##CHR(13)##//##CHR(10)##/ ИДШтрихкода = ЗАПРОС("INSERT INTO sprnnbc (nn, bc)/##CHR(13)##//##CHR(10)##/ VALUES (''" + Товар + "'',''" + ШтрихКод + "'')");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //КОНЕЦ СОЗДАНИЯ ТОВАРОВ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:03') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.2 (с созданием новых товаров)','ТСД',0.00000000,'',0.00000000,7541.00000000,0,'',0.00000000,'','',0,'23FA9221-3E38-4541-AEE8-62E2C54B4A77',0,1,0,'28.09.2022 12:19:03') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.1 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.1 #code 0000000220 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments,inDocuments_Sbor, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, СкладПолучатель, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки, КОЛВОДОКСБОРШК, indexS;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##/СкладПолучатель = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "MRK")/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ИДВНУТРЕННИЙДОК;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ТипДокумента = "";/##CHR(13)##//##CHR(10)##/Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Отправлять_в_ЕГАИС == 0 )/##CHR(13)##//##CHR(10)##/ docType = "Списание";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="MRK") //Проверка маркировки/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///добавим "СборШК" в список возвращаемых документов/##CHR(13)##//##CHR(10)##/КолВоДокСборШК = 0;/##CHR(13)##//##CHR(10)##/IF (docType <> "СборШК" AND !ПУСТО(docType))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //получение завершенных документов "СборШК" с сервера/##CHR(13)##//##CHR(10)##/ inDocuments_Sbor = connector.GetDocuments("СборШК", checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/ КолВоДокСборШК = inDocuments_Sbor.Count;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDocSbor = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDocSbor < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DocumentSbor = inDocuments_Sbor.Item(IndexDocSbor);/##CHR(13)##//##CHR(10)##/ inDocuments.Add(DocumentSbor);/##CHR(13)##//##CHR(10)##/ IndexDocSbor++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/Document = "";/##CHR(13)##//##CHR(10)##/Document_sbor = "";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##///IF (КолВоДок==0 AND КолВоДокСборШК==0)/##CHR(13)##//##CHR(10)##/IF ( КолВоДок==0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document) >= 0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //СборШК/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(9000 + IndexDoc + 1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments_Sbor.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments_Sbor.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments_Sbor.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments_Sbor.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы:"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КолВоДокСборШК > 0 AND Загружаем==false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE(inDocuments_Sbor) <> "U")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments_Sbor.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ //Склады из документа - начало/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = Document.GetField("ИдСклада1СОткуда");/##CHR(13)##//##CHR(10)##/ СкладКуда = Document.GetField("ИдСклада1СКуда");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = "";/##CHR(13)##//##CHR(10)##/ СкладКуда = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА <> "005" )/##CHR(13)##//##CHR(10)##/ СкладДокумента = Document.GetField("ИдСклада1С");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СкладДокумента = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладОткуда) AND TYPE(СкладОткуда)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладОткуда;/##CHR(13)##//##CHR(10)##/ ELSE IF (!ПУСТО(СкладДокумента) AND TYPE(СкладДокумента)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладДокумента; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладКуда) AND TYPE(СкладКуда)<>''L'')/##CHR(13)##//##CHR(10)##/ СкладПолучатель = СкладКуда;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //склады из документа - конец/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ АлкоМарка = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ АлкоМарка = Элемент.GetField("Марка"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоМарка) == "L")/##CHR(13)##//##CHR(10)##/ АлкоМарка = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND !ПУСТО( АлкоМарка ) ) /##CHR(13)##//##CHR(10)##/ АлкоПДФ = АлкоМарка;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК" OR Document.DocumentTypeName == "Инвентаризация") //если сканировали через Сбор Штрихкодов или инвентаризацию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // произведем изменение товара, чтобы данные по нему передались в РМК/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE sprres SET ex_code = ex_code WHERE code = ''" + Товар + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ ); /##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, sklad_d, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + СкладПолучатель + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК++;/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) <> "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) == "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( spec.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЦенаСклада = СписокТоваров.ЦенаСклада;/##CHR(13)##//##CHR(10)##/ IF (!_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ AND ЦенаСклада == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.alcotype, 1, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = СписокТоваров.alcotype == 2;/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товара: " + Наименование + " с кодом " + КодТовара + ". Загрузка товаров прервана" );/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "КОДДОКУМЕНТА = " + КОДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "ИДДОКУМЕНТА = " + ИДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "СПИСОКДОКУМЕНТОВ = " + СПИСОКДОКУМЕНТОВ, "отладка" );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "005", "007", "019", "045", "055", "MRK" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ИДДОКУМЕНТА;/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "045" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "003" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС) ) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0 ) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС == 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Списание"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code == "MRK") //Маркировка - приёмка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ //document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ СкладКуда = ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяСкладаОткуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладОткуда + "''");/##CHR(13)##//##CHR(10)##/ ИмяСкладаКуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладКуда + "''");/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаОткуда", ИмяСкладаОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаКуда", ИмяСкладаКуда); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, '''' AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column, (SELECT TOP 1 boxnumber FROM barcodes bc WHERE bc.code = ''" + СписокДокументов.code + "'' AND bc.ic = spec.ic AND bc.spec_ic = spec.identity_column) AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode, boxnumber FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Марки.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //шк коробки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИмяПоляСЦеной) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Спецификация.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes_ex( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.1','ТСД',0.00000000,'',0.00000000,7542.00000000,0,'',0.00000000,'','',0,'87B0B5B4-9074-4AA3-9B89-E8D9FBBB16EB',0,1,0,'28.09.2022 12:19:04') #begin #description Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) #name Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) #code 0000000182 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd , 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьКодНалогаВККМ" - функция, которая получает значение кода налога в ККМ по коду налога из справочника списка налогов в Айтиде/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18/20% vat20 - НДС 20%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьКодНалогаВККМ. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', "vat10", ЕСЛИ( КодНалогаАйтида == ''04'', "vat20", ЕСЛИ( КодНалогаАйтида == ''06'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьНалогККМПоТипуНалога" - функция, которая получает значение кода налога в ККМ по типу налога из карточки налога справочника кодов налогов в Айтиде (из поля "Рассчитывать")/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// КодНалогаАйтида - код налога из справочники Кодов Налогов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT proc_, ntype FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''","ДанныеПоНалогу", 1);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ ТипНалога = ДанныеПоНалогу.ntype;/##CHR(13)##//##CHR(10)##/ ПроцентНалога = ДанныеПоНалогу.proc_;/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Тип налога в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 20% vat20 - НДС 20% /##CHR(13)##//##CHR(10)##/ //05 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //07 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //"" - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьНалогККМПоКодуНалога. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( ТипНалога == ''06'', "vat20", ЕСЛИ( ТипНалога == ''05'', "vat10", ЕСЛИ( ТипНалога == ''07'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТипЧекаАйтида ) == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellCorrection", "sell");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellReturnCorrection", "sellReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyCorrection", "buy");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyReturnCorrection", "buyReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = "sell"; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьЗначениеСНО( КодСНО )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СНО = "";/##CHR(13)##//##CHR(10)##/ IF ( КодСНО == 1 )/##CHR(13)##//##CHR(10)##/ СНО = "osn";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 2 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncome";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 4 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncomeOutcome"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 8 )/##CHR(13)##//##CHR(10)##/ СНО = "envd";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 16 )/##CHR(13)##//##CHR(10)##/ СНО = "esn"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 32 )/##CHR(13)##//##CHR(10)##/ СНО = "patent";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СНО; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"АТОЛ_ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/// Функция возвращает значения: /##CHR(13)##//##CHR(10)##/// true - если кассовый чек успешно пробился в ККМ/##CHR(13)##//##CHR(10)##/// false - если в процессе возникла ошибка пробития чека/##CHR(13)##//##CHR(10)##/// /##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек, КОДУСТРОЙСТВАПЕЧАТИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка закрытия документа в ККМ и попытка его допечатать/##CHR(13)##//##CHR(10)##/ While (fptr.checkDocumentClosed() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос/##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось пробить кассовый чек (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и нажмите ""ОК"" ");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно/##CHR(13)##//##CHR(10)##/ While (fptr.continuePrint() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз./##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось напечатать документ (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и повторите.");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, ФискальныйЧек, _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ, ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, НомерЧекаККМ, НомерСменыККМ, _ОТДЕЛЬНЫЙСЛИПЕГАИС, _ВАРИАНТВЫВОДАШКЕГАИС, _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, _ШИРИНАШКЕГАИС, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ;/##CHR(13)##//##CHR(10)##/PUBLIC _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ, _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ, _РАБОТАСЕГАИС, _ККТ_ШИРИНА_ЛЕНТЫ, _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[0] = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию НЕ будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = true; //признак необходимости печати слипов ЕГАИС, true - печатать, false - не печатать (для исключительных ситуаций)/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = "cash";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= "electronically";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = "prepaid";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = "credit";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = "other";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/_КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ= 14; //количество дней возраста буфера чеков в ФН, который считается критичным и требует внимания пользователя (будет выведено сообщение)/##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///!!!ПОСЛЕ ИЗМЕНЕНИЯ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ ТРЕБУЕТСЯ ПЕРЕЗАПУСТИТЬ АЙТИДУ ДЛЯ ВСТУПЛЕНИЯ ИЗМЕНЕНИЙ В СИЛУ/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///переменные для оптимизации используемого пространства на чековой ленте при печати слипов ЕГАИС и для экономии чековой ленты/##CHR(13)##//##CHR(10)##///возможен вариант совмещенной печати слипа ЕГАИС вместе с кассовым чеком/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОТДЕЛЬНЫЙСЛИПЕГАИС = false; // признак необходимости печати слипа ЕГАИС отдельно от кассового чека. /##CHR(13)##//##CHR(10)##/ //Значения: true - Слип ЕГАИС печатается как отдельный нефискальный чек/##CHR(13)##//##CHR(10)##/ // false - Слип ЕГАИС печатается вместе с кассовым чеком/##CHR(13)##//##CHR(10)##/ ///##CHR(13)##//##CHR(10)##/_ВАРИАНТВЫВОДАШКЕГАИС = 2; //Вариант вывода QR-кода ЕГАИС на чеке. /##CHR(13)##//##CHR(10)##/ //Значения:/##CHR(13)##//##CHR(10)##/ // Вариант 1 - стандартно - (QR по центру, ссылка и цифровая подпись под ним снизу)/##CHR(13)##//##CHR(10)##/ // Вариант 2 - с оверлеем (ссылка слева, QR - справа, цифровая подпись - снизу) /##CHR(13)##//##CHR(10)##/ //!!!ВНИМАНИЕ. При использовании варианта = 2, чтобы QR не перекрывал ссылку, требуется тонкая подстройка значений следующих параметров:/##CHR(13)##//##CHR(10)##/ // _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _ШИРИНАШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС = 4; //Коэффициент увеличения QR ЕГАИС. По умолчанию равно 4. Для данного значения коэффициента ширина QR Егаис составляет 13 символов./##CHR(13)##//##CHR(10)##/ //При изменении значения коэффициента и использования _ВАРИАНТВЫВОДАШКЕГАИС равного 2 требуется ручная подгонка параметров, указанных в описании параметра _ВАРИАНТВЫВОДАШКЕГАИС. /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = 32; //Количество символов в строке, помещающееся на чековой ленте. Как правило для 57 ленты равно 32-36 символов, для 80й ленты - 48-64 символов (в зависимости от используемого шрифта)./##CHR(13)##//##CHR(10)##/ //Данный параметр используется для вывода ШК ЕГАИС с оверлеем (_ВАРИАНТВЫВОДАШКЕГАИС = 2: ШК справа, ссылка слева)/##CHR(13)##//##CHR(10)##/ //ВАЖНО!!! - Данный параметр будет автоматически подстраиваться под используемую модель ККТ посредством выполнения обработки "ШиринаЛенты" данного профиля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШИРИНАШКЕГАИС = 13; //Количество символов строки, занимаемое QR-кодом ЕГАИС. Данный параметр расчитан экспериментальным путем для коэффициента увеличения QR ЕГАИС равным 4./##CHR(13)##//##CHR(10)##/ //Требует корректировки только при _ВАРИАНТВЫВОДАШКЕГАИС = 2 и изменении _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС на значение не равное стандартному (4)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ = 1; //Номер Шрифта ККМ для печати нефискальных (текстовых) строк. По умолчанию имеет значение равное 0, что соответствует шрифту, настроенному в параметрах ККМ./##CHR(13)##//##CHR(10)##/ //ВНИМАНИЕ!!! Изменение номера шрифта для нефискальной печати влияет на любую нефискальную печать профилем (слип ЕГАИС, банковские слипы, нефискальные строки в чеке)/##CHR(13)##//##CHR(10)##/ //При изменении номера шрифта на значение отличное от значения по умолчанию 0, требутеся корректировка значения переменной _ШИРИНАШКЕГАИС, если _ВАРИАНТВЫВОДАШКЕГАИС равен 2 /##CHR(13)##//##CHR(10)##///Прочие переменные/##CHR(13)##//##CHR(10)##/_КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ = true; //Переменная отвечает за необходимость контроля при открытии смены расхождения даты и времени в ККМ с датой и временем в ПК. /##CHR(13)##//##CHR(10)##/ //Если расхождение больше чем на _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ минут, то будет выведен запрос пользователю о синхронизации даты и времени/##CHR(13)##//##CHR(10)##/ // Значения: true - контроль даты и времени включен, false - контроль выключен/##CHR(13)##//##CHR(10)##/_ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ = 3; //Допустимое количество минут расхождения даты и времени. Значение по умолчания равно 3 минутам. /##CHR(13)##//##CHR(10)##/ //Разница времени с ККМ меньшая указанного количества минут считается нормальной и изменение даты/времени не осуществляется/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE ("_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ = false; //Необходимость вывода информации о начисленных и списанных бонусных баллах на чеке, а так же остаток бонусов. true - выводить, false - не выводить/##CHR(13)##//##CHR(10)##/ //Работает на версии 4.0.6 и выше, при использовании стандартной бонусной системы/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ = 128;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - КОНЕЦ',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/fptr = false;/##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВыплата = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashOut"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВыплата);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВыплата = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Выплата",ОтветВыплата);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВыплата",Выплата.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВыплата.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВыплата");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выплаты денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерСменыККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ СтатусСмены = ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "state", "" );/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "number", "" ) ); //+ ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера смены. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'ВерсияПрофиля = "v.5.15"; /##CHR(13)##//##CHR(10)##/// Имя устройства ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceName = "ККМ АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN "(" + ВерсияБиблиотеки + ") ДРАЙВЕР ККТ АТОЛ v.10 НЕ УСТАНОВЛЕН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ modelName = ДанныеИнфоККТ.modelName;/##CHR(13)##//##CHR(10)##/ serial = ДанныеИнфоККТ.serial;/##CHR(13)##//##CHR(10)##/ firmwareVersion = ДанныеИнфоККТ.firmwareVersion;/##CHR(13)##//##CHR(10)##/ configurationVersion = ДанныеИнфоККТ.configurationVersion;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( configurationVersion ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с версией платформы в БД/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); //удаляем параметр, чтобы не дублировался при записи/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ); /##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + ЕСЛИ(LEFT(configurationVersion, 1) == "5", 1, 0) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ fiscal = ДанныеСтатусККТ.fiscal;/##CHR(13)##//##CHR(10)##/ shift = ДанныеСтатусККТ.shift;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( shift == "opened" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена открыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "closed" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена закрыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "expired" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена > 24ч";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "";/##CHR(13)##//##CHR(10)##/ //deviceName = modelName + ", №" + serial + ", v." + firmwareVersion + ", " + ЕСЛИ(fiscal == true, "ФИСК", "НЕФИСК") + ", Версия прошивки ККТ: " + configurationVersion + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияПрофиля + ") " + modelName + ", №" + serial + ", v." + configurationVersion + ", " + ЕСЛИ(fiscal == "true" OR fiscal == true, "ФИСК", "НЕФИСК") + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STATUS);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ deviceName = fptr.getParamString(fptr.LIBFPTR_PARAM_MODEL_NAME) + ", №" + fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER) + /##CHR(13)##//##CHR(10)##/ ", v." + fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION) + ", " + ЕСЛИ(fptr.getParamBool(fptr.LIBFPTR_PARAM_FISCAL) == true, "ФИСК", "НЕФИСК");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияБиблиотеки + ") Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки (из доп. кода)/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ", /##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", "1", "4" ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)]; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", "1", "4" ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерЧекаККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусФН = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getFnStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусФН);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусФН = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусФН, "fnStatus", "" ), "fiscalDocumentNumber", "" ) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера чека ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"[", "(");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"]", ")");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция КАС_ПолучитьGTIN_SERIAL_ИзШтрихкодаМаркировки()/##CHR(13)##//##CHR(10)##///Описание: Получает gtin и серийный номер из штрихкода маркировки по типу маркировки и возвращает общую длинну кода маркировки без крпиптохвоста/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Параметры: /##CHR(13)##//##CHR(10)##/// ШтрихкодМаркировки - штрихкод марки, из которого извлекаем gtin и serial/##CHR(13)##//##CHR(10)##/// ТипМаркировки - строка, тип маркировки, по которому определяем какое количество символов serial брать из ШтрихкодаМаркировки/##CHR(13)##//##CHR(10)##/// gtin - экспортный параметр, заполняется полученным значением gtin/##CHR(13)##//##CHR(10)##/// serial - экспортный параметр, заполняется полученным значением serial/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьДлиннуШтрихкодаМаркировки(ШтрихкодМаркировки, ТипМаркировки, gtin, serial)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = 1; //определеяем начало символов расположения GTIN в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ //если встретили первыми двумя символами идентификатор 01, то смещаем начало чтения GTIN/##CHR(13)##//##CHR(10)##/ IF ( LEFT( ШтрихкодМаркировки, 2 ) == "01" ) /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = НачалоСимволовGTIN + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ GTIN/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШтрихкодМаркировки, НачалоСимволовGTIN, 14);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = LEN(gtin) + НачалоСимволовGTIN; // вычисляем начало символов расположения SERIAL в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, 2) == "21" ) //если сразу после GTIN встретили идентификатор 21, то смещаем начало чтения серийного номера на 2 символа/##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = НачалоСимволовSERIAL + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //наиболее распространенный вариант/##CHR(13)##//##CHR(10)##/ //далее по типу маркировки определим сколько символов необходимо брать для SERIAL/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //табак/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "1520" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //обувь/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0003" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //лекарства/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0002" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //шубы/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9999" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //прочая/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9996" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //фото/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9995" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //парфюм/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9997" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //шины/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9998" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //легпром/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9994" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //АТП/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ SERIAL/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, КоличествоСимволовSERIAL);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлиннаКода = НачалоСимволовSERIAL + КоличествоСимволовSERIAL - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для табака будем возвращать нулевую длинну, чтобы шк марки не изменился при передаче/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" )/##CHR(13)##//##CHR(10)##/ ДлиннаКода = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ДлиннаКода;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция проверяет выполнение равенства выражения "Количество*Цена = Сумма" для позиций чека и при необходимости разделяет позиции чека на две, если в одной позиции такого равенства невозможно добиться/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПроизвестиФорматноЛогическийКонтроль()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ККТ_ИСПОЛЬЗОВАТЬФЛК", true ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождениеФЛК = VAL( ПЕРЕМЕННАЯ( "_ККТ_ДОПУСТИМОЕРАСХОЖДЕНИЕФЛК", 0.01 ) ); // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //вычислим номер первой строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПервойСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column ASC");/##CHR(13)##//##CHR(10)##/ //вычислим номер последней строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПоследнейСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column DESC");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся до первой строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column < " + НомерПервойСтрокиТовара,"НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отдельно обработаем позиции чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column", "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПозицииЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоТовара = VAL( ПозицииЧека.quantity );/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( ПозицииЧека.summa );/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = VAL( ПозицииЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ Наименование = ПозицииЧека.name;/##CHR(13)##//##CHR(10)##/ _Цена_Учет = VAL( ПозицииЧека._price_u );/##CHR(13)##//##CHR(10)##/ СекцияККМ = ПозицииЧека.department;/##CHR(13)##//##CHR(10)##/ КодНалога = ПозицииЧека.kodn;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = ПозицииЧека.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчета = ПозицииЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПарольОперации = ПозицииЧека.password;/##CHR(13)##//##CHR(10)##/ ИмяОперации = ПозицииЧека.operation;/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ПозицииЧека.marktype;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ПозицииЧека.markbc;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = VAL( ПозицииЧека.price ); /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ЭТОРМК )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = ROUND( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ + VAL( ПЕРЕМЕННАЯ( "_ВСЕГООПЛАТАБОНУСАМИ", 0) ) - СУММАОПЛАТЫ, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ <> 0 AND ОстатокОтСуммыРасчетной <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( СуммаТовара - ОстатокОтСуммыРасчетной, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции + ОстатокОтСуммыРасчетной;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = 0.000;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //} /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = 0;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СуммаТовара / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = ROUND( КоличествоТовара * РасчетнаяЦена, 2 );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СуммаТовара;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ //IF ( РазницаСумм =< -1*ДопустимоеРасхождениеФЛК OR РазницаСумм >= ДопустимоеРасхождениеФЛК)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ABS( РазницаСумм ), 2 ) >= ROUND( ДопустимоеРасхождениеФЛК, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = ROUND( КоличествоТовара, 3 );/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ //ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = ROUND( РазницаСумм / 0.01, 3 );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - ROUND( РазницаСумм / КоличествоПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчитаем новую сумму с округлением до 2х знаков, /##CHR(13)##//##CHR(10)##/ //все что меньше или равно 0.005 округляем в меньшую сторону, а 0.006- 0.009 - в большую/##CHR(13)##//##CHR(10)##/ //чтобы достичь округления в меньшую сторону, вычтем 0.0001. /##CHR(13)##//##CHR(10)##/ //Так, например, число 10.245 приведем к 10.2449, что с округлением до двух знаков получится равным 10.24/##CHR(13)##//##CHR(10)##/ СуммаНовая = ROUND( КоличествоНовое * РасчетнаяЦена - 0.0001, 2 ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение. /##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки > КоличествоНовое )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ROUND(ТекущаяСкидка * КоличествоПереоценки / КоличествоТовара, 2 );/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ROUND(ТекущаяСкидка * КоличествоНовое / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ТекущаяСкидка - СуммаСкидокРасчетная;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ //СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //получить часть штрихкодов маркировки, если позиция маркированная и с несколькими марками/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ШтрихКодМаркировки) AND VAL(ТипМаркировки) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки = 1;/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиВрем = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ WHILE (КоличествоШКМаркировки <= КоличествоНовое)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировкиВрем, РазделительМарок, КоличествоШКМаркировки );/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый += ЕСЛИ( !ПУСТО(ШтрихКодМаркировкиНовый), "|", "") + Марка;/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = AT( ШтрихКодМаркировки, "|", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ IF ( ПозицияРазделителяСлева == 0 )/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = LEN( ШтрихКодМаркировки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировки, ПозицияРазделителяСлева );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировкиНовый, LEN( ШтрихКодМаркировкиНовый ) - 1 );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", РасчетнаяЦена );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидокНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиНовый);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Добавлена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоНовое, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( РасчетнаяЦена, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидокНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиНовый); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( КоличествоПереоценки * ЦенаПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировки, LEN( ШтрихКодМаркировки ) - LEN( ШтрихКодМаркировкиНовый ) );/##CHR(13)##//##CHR(10)##/ IF ( ЛЕВСИМВ( ШтрихКодМаркировкиОстаток, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = LEFT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем строку /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", ЦенаТоварнойПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидкиПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиОстаток);/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Изменена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( ЦенаТоварнойПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидкиПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиОстаток); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнуление переменных/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ _Цена_Учет = 0.000; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ //\ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПозицииЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся после последней строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column > " + НомерПоследнейСтрокиТовара,"ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //теперь удалим все строки из таблицы позиций/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM " + ИмяТаблицыСтрокЧека);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //и загрузим в неё данные из сформированных контекстов/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР(КОДУСТРОЙСТВАПЕЧАТИ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ЧЕКНАИМЕНОВАНИЕ, false, "text", "center", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ), false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫВОД QR КОДА НА ЧЕКЕ/##CHR(13)##//##CHR(10)##/ IF ( _ВАРИАНТВЫВОДАШКЕГАИС == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 1: вывода ШК по центру без оверлея и все подписи под ШК кодом по центру/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""center""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //ссылка ЕГАИС под QR кодом/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_url, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 2: (ШК справа, ссылка слева и цифровая подпись снизу/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""right"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Определим параметры печати с оверлеем./##CHR(13)##//##CHR(10)##/ //Чтобы ссылка егаис не скрывалась под QR кодом, разобъем её на подстроки и выведем эти подстроки слева от QR кода/##CHR(13)##//##CHR(10)##/ ТекстСсылкиЕГАИС = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ ШиринаПечатиСсылки = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ - _ШИРИНАШКЕГАИС;/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = LEN(ТекстСсылкиЕГАИС);/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок = ЦЕЛОЕ( КоличествоСимволовВссылке/ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСимволовВссылке % ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) <> 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Оверлей = "/##CHR(13)##//##CHR(10)##/ ""overlay"": [";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 1;/##CHR(13)##//##CHR(10)##/ FOR ( index = 1; index <= КоличествоПодстрок ; index++ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = ЕСЛИ(КоличествоСимволовВссылке - ШиринаПечатиСсылки <= 0, КоличествоСимволовВссылке, КоличествоСимволовВссылке - ШиринаПечатиСсылки); /##CHR(13)##//##CHR(10)##/ ТекстПодстроки = SUBSTR( ТекстСсылкиЕГАИС, НачальнаяПозиция, ЕСЛИ( index == КоличествоПодстрок, КоличествоСимволовВссылке, ШиринаПечатиСсылки ) );/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = НачальнаяПозиция + ШиринаПечатиСсылки;/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + ЕСЛИ( ПРАВСИМВ( Оверлей, 1 ) == "}", ",", "" ) + "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + ТекстПодстроки + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": ""left"",/##CHR(13)##//##CHR(10)##/ ""wrap"": ""chars"",/##CHR(13)##//##CHR(10)##/ ""font"":" + VAL( _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ ) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрывающая оверлей квадратная скобка/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //соберем объект для печати QR кода со ссылкой/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = НоваяСтрокаШК + Оверлей + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ //добавим полученный объект со штрихкодом к позициям чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //далее цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОТДЕЛЬНЫЙСЛИПЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, "" );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": true";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА") == "U")/##CHR(13)##//##CHR(10)##/ _ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == true AND ЦенаУчетная == 0)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == false AND ЦенаУчетная == 0) /##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ЦенаУчетная;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //константа. отвечающая за необходимость скрывать все наценки/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРСКРЫВАТЬВСЕНАЦЕНКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ФРСКРЫВАТЬВСЕНАЦЕНКИ = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРСКРЫВАТЬВСЕНАЦЕНКИ == true)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //для ККТ на 5й платформе цена позиции должна указываться уже со скидками/##CHR(13)##//##CHR(10)##/ ЭтоПлатформа5 = VAL( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ) == 1;/##CHR(13)##//##CHR(10)##/ IF (ЭтоПлатформа5)/##CHR(13)##//##CHR(10)##/ {*//##CHR(13)##//##CHR(10)##/ //09.03.2021 - изменение алгоритма пробития скидок на единый для всех платформ ККТ./##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ROUND(СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара), 2);/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "partialPayment"; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "credit"; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ = false; //признак необходимости выводить букву [М] для товарной позиции в чеке средствами профиля. По умолчанию отключено (значение false),/##CHR(13)##//##CHR(10)##/ //т.к. ожидается что буква [М] будет выводиться средствами прошивки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //***/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162") == "U")/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 = false; //признак необходимости использовать старый формат тэга 1162 для чеков. По умолчанию равен false, т.е. используется новый формат/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = КомандыЧека.markbc;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) <> 0 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец разбора списка марок/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/ IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ //Цена = СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ //ЦенаПродажиПозиции = Цена;/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = ЦенаПродажиПозиции;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( ЕСЛИ(_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ == true AND !ПУСТО( КомандыЧека.markbc ), "(М) ","") + КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128 ) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + Количество + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( Сумма, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 7 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""tobacco"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""medicines"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 19, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""shoes"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ = false; //признак необходимости передавать весь код маркировки в составе реквизитов чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = ШКМарки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = 0;/##CHR(13)##//##CHR(10)##/ gtin = "";/##CHR(13)##//##CHR(10)##/ serial = "";/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = ПолучитьДлиннуШтрихкодаМаркировки(ШКМарки, КомандыЧека.marktype, gtin, serial);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДлинаКодаМаркировки > 0 )/##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = LEFT( ШКМарки, ДлинаКодаМаркировки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ markingCode = ПЕРЕКОДИРОВАТЬ( ALLTRIM( ШтрихкодМаркировкиДляЧека ), "", "BASE64" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""markingCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""other"",/##CHR(13)##//##CHR(10)##/ ""mark"": """ + markingCode + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТекстМаркировка = "," + CHR(13) + """nomenclatureCode"": """ + markingCode + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем текст маркировки в позиции и завершаем объект позиции/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += ТекстМаркировка + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара -= Количество;/##CHR(13)##//##CHR(10)##/ СуммаПозиции -= Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КоличествоТовара + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += "}";/##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим информацию о бонусах в чек/##CHR(13)##//##CHR(10)##/ IF (_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ == true AND !ПУСТО( НОМЕРКАРТЫ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ТИПБОНУСА= ЗАПРОС( "SELECT bonusalias FROM sprbonus WHERE code IN ( SELECT bonus FROM sprmcard WHERE cardn = ''" + НОМЕРКАРТЫ + "'' )" );/##CHR(13)##//##CHR(10)##/ ОПЛАЧЕНОБОНУСОМ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''-'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ НАЧИСЛЕНОБОНУСОВ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''+'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ ОСТАТОКБОНУСОВ = STR( ЗАПРОС( "SELECT dbo.fn_calccard_bonus( ''" + НОМЕРКАРТЫ + "'', ''" + ТИПБОНУСА + "'', DEFAULT );" ), 10, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Списано бонусов: " + ОПЛАЧЕНОБОНУСОМ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Начислено бонусов: " + НАЧИСЛЕНОБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Остаток бонусов: " + ОСТАТОКБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE("СУММАСКИДКИ") == "I" OR TYPE("СУММАСКИДКИ") == "B")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СУММАСКИДКИ > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Ваша экономия составила: " + STR(СУММАСКИДКИ, 10, 2) + " руб.", false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" );/##CHR(13)##//##CHR(10)##/ //если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/ IF ( РезультатПечатиЧека == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" ); //повторим печать чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ //ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ //IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец повтора печати чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР("");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 1024 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), /##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), marktype char(10), markbc varchar(MAX), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) AND _РАБОТАСЕГАИС )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("КОНТРАГЕНТ") == "U")/##CHR(13)##//##CHR(10)##/ КОНТРАГЕНТ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАОТКРЫТИЯДРАЙВЕРА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF (ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Перед настройкой драйвера оборудования необходимо записать карточку торгового оборудования");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Показать свойства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера." + CHR(13) + "Возможно не установлен драйвер ККТ АТОЛ версии 10 (32х разрядный).","Ошибка загрузки драйвера");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT TOP 1 value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( fptr.ShowProperties(fptr.LIBFPTR_GUI_PARENT_NATIVE, 0) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = fptr.getSettings();/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + НастройкиККТ + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОШИБКАОТКРЫТИЯДРАЙВЕРА == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось открыть окно настроек драйвера");/##CHR(13)##//##CHR(10)##/ ///*/##CHR(13)##//##CHR(10)##/ ВОПРОС = "Инициализировать сохраненные настройки связи значениями поумолчанию?";/##CHR(13)##//##CHR(10)##/ IF (СООБЩЕНИЕ(Вопрос,"Настройка связи с ККТ", 4) == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //удалим параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Сохраненные настройки ККТ удалены. Попытайтесь открыть диалоговое окно драйвера еще раз.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //*//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = 0;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/СменаОткрытаВККМ = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd , 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", "5", "0" ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = "0"; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СменаОткрытаВККМ = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаОткрытаВККМ == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена открыта в ККМ", "Ответ ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "В ККМ """ + ALLTRIM(ИмяОборудования) + """ не открыта смена." + CHR(13) + "Произвести открытие смены в ККМ?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(ТекстВопроса,"Открытие смены", 4);/##CHR(13)##//##CHR(10)##/ IF ( КодОтвета == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветОткрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("ОткрытиеСмены",ОтветОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатОткрытияСмены",ОткрытиеСмены.fiscalParams);/##CHR(13)##//##CHR(10)##/ //НомерСменыККМ = РезультатОткрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ //НомерФД = РезультатОткрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ //НомерФН = РезультатОткрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ //ПодписьФД = РезультатОткрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ //РегНомер = РезультатОткрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ //ДатаВремяФД = РезультатОткрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатОткрытияСмены");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия смены в ККМ. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеЯщика = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openCashDrawer""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеЯщика);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия денежного ящика. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВнесение = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashIn"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВнесение);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВнесение = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Внесение",ОтветВнесение);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВнесение",Внесение.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВнесение.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВнесение");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка внесения денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/IF (ЭТОРМК)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать комментария после фискальных строк и перед оплатой/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, mode, checktype, name)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', 2, ''left'', ''" + STDF(КОММЕНТАРИЙ) + "'' )" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ВозврастБуфераДней; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ККТ_ШИРИНА_ЛЕНТЫ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ RETURN _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = 27;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = VAL(ДанныеИнфоККТ.receiptLineLength);/##CHR(13)##//##CHR(10)##/ //ШиринаЛентыПикселей = VAL(ДанныеИнфоККТ.receiptLineLengthPix);/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении ширины ленты ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ККТ_ШИРИНА_ЛЕНТЫ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(КОДОБОРУДОВАНИЯ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /* //проверка не нужна, т.к. она происходит автоматически при отправке запроса с заданием/##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаХОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportX"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаХОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Х-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ДОПОЛНИТЕЛЬНЫЕ ПРОВЕРКИ ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /* //отмену чека не делаем, потому как это произойдет автоматически при передаче запроса закрытия смены /##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены в ККМ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СостояниеСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ СменаОткрыта = СостояниеСмены == "opened" OR СостояниеСмены == "expired";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СменаОткрыта <> true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена закрыта в ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КОНЕЦ ДОПОЛНИТЕЛЬНЫХ ПРОВЕРОК ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЗакрытияСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""closeShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаЗакрытияСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветЗакрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ЗакрытиеСмены",ОтветЗакрытиеСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("ЗакрытиеСмены") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗакрытияСмены", fiscalParams);/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = РезультатЗакрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерФД = РезультатЗакрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = РезультатЗакрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ НомерФН = РезультатЗакрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = РезультатЗакрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = РезультатЗакрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = РезультатЗакрытияСмены.receiptsCount;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияСмены", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ ОтчетНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ОтчетНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Z-Отчет не допечатался на ККМ" + CHR(13) + "Допечатать отчет?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати отчета", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Z-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 0 - гашение контрольной ленты /##CHR(13)##//##CHR(10)##/// 3 - краткий фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 4 - краткий фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 5 - полный фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 6 - полный фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// 10 - отчет о продажах по часам/##CHR(13)##//##CHR(10)##/// 11 - отчет по количеству/##CHR(13)##//##CHR(10)##/// 22 - ЭКЛЗ итоги активизации/##CHR(13)##//##CHR(10)##/// 23 - ЭКЛЗ итоги смены/##CHR(13)##//##CHR(10)##/// 24 - ЭКЛЗ контрольная лента смены/##CHR(13)##//##CHR(10)##/// 26 - ЭКЛЗ по датам краткий по отделам/##CHR(13)##//##CHR(10)##/// 27 - ЭКЛЗ по датам полный по отделам/##CHR(13)##//##CHR(10)##/// 28 - ЭКЛЗ по датам краткий по итогам смен/##CHR(13)##//##CHR(10)##/// 29 - ЭКЛЗ по датам полный по итогам смен/##CHR(13)##//##CHR(10)##/// 30 - ЭКЛЗ по сменам краткий по отделам/##CHR(13)##//##CHR(10)##/// 31 - ЭКЛЗ по сменам полный по отделам/##CHR(13)##//##CHR(10)##/// 32 - ЭКЛЗ по сменам краткий по итогам/##CHR(13)##//##CHR(10)##/// 33 - ЭКЛЗ по сменам полный по итогам/##CHR(13)##//##CHR(10)##/// 41 - копия последнего чека/##CHR(13)##//##CHR(10)##/// 42 - отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/// 50 - сверка итогов/##CHR(13)##//##CHR(10)##/// 100 - печать копии чека по номеру ФД/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 11 ) OR ВСПИСКЕ( ТипОтчета, 22, 23, 24, 41, 42, 100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 42 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //получим информацию о кассире/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportOfdExchangeStatus"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по секциям/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_DEPARTMENTS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 8 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по кассирам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OPERATORS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 9 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по товарам по суммам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по часам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_HOURS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 11 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет количеств/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_QUANTITY);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 22 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Печать итогов регистрации / перерегистрации/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_REGISTRATIONS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 23 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Счетчики итогов ФН/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 24 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //отчет по товарам по СНО/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 100 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = true;/##CHR(13)##//##CHR(10)##/ //проверим что номер чека передан, т.е. выбрали конкретный чек из списка или номер у выбранного чека не равен 0/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( VAL(НОМЕРЧЕКА) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не выбран кассовый чек для печати копии", "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ПечатаемКопию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //копия чека по номеру ФД/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, НОМЕРЧЕКА);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Отчет №" + ТипОтчета + ": Данный отчет не поддерживается профилем оборудования" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL(ДанныеСтатусСмены.number) + ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ Статус = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN Статус;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Статус = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении статуса смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Статус;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN "Копия последнего чека|41;Отчет о состоянии расчетов|42;Отчет по секциям|7;Отчет по кассирам|8;Отчет по товарам по суммам|9;Отчет по часам|10;Отчет количеств|11;/##CHR(13)##//##CHR(10)##/Печать итогов регистрации / перерегистрации|22;Счетчики итогов ФН|23;Отчет по товарам по СНО|24";',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10)','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Атол с поддержкой работы по ФФД 1.0 - 1.05.',0.00000000,5983.00000000,0,'',0.00000000,'','',0,'7F45FB0C-39AF-48B6-944C-891F4CC4CBCF',0,1,0,'28.09.2022 12:19:04') #begin #description Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой АТОЛ #name Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой АТОЛ #code 0000000161 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьКодНалогаВККМ" - функция, которая получает значение кода налога в ККМ по коду налога из справочника списка налогов в Айтиде/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18/20% vat20 - НДС 20%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьКодНалогаВККМ. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', "vat10", ЕСЛИ( КодНалогаАйтида == ''04'', "vat20", ЕСЛИ( КодНалогаАйтида == ''06'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьНалогККМПоТипуНалога" - функция, которая получает значение кода налога в ККМ по типу налога из карточки налога справочника кодов налогов в Айтиде (из поля "Рассчитывать")/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// КодНалогаАйтида - код налога из справочники Кодов Налогов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT proc_, ntype FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''","ДанныеПоНалогу", 1);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ ТипНалога = ДанныеПоНалогу.ntype;/##CHR(13)##//##CHR(10)##/ ПроцентНалога = ДанныеПоНалогу.proc_;/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Тип налога в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 20% vat20 - НДС 20% /##CHR(13)##//##CHR(10)##/ //05 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //07 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //"" - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьНалогККМПоКодуНалога. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( ТипНалога == ''06'', "vat20", ЕСЛИ( ТипНалога == ''05'', "vat10", ЕСЛИ( ТипНалога == ''07'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТипЧекаАйтида ) == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellCorrection", "sell");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellReturnCorrection", "sellReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyCorrection", "buy");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyReturnCorrection", "buyReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = "sell"; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьЗначениеСНО( КодСНО )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СНО = "";/##CHR(13)##//##CHR(10)##/ IF ( КодСНО == 1 )/##CHR(13)##//##CHR(10)##/ СНО = "osn";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 2 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncome";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 4 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncomeOutcome"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 8 )/##CHR(13)##//##CHR(10)##/ СНО = "envd";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 16 )/##CHR(13)##//##CHR(10)##/ СНО = "esn"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 32 )/##CHR(13)##//##CHR(10)##/ СНО = "patent";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СНО; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"АТОЛ_ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/// КОДУСТРОЙСТВАПЕЧАТИ - код карточки торгового оборудования, на котором печатается чек/##CHR(13)##//##CHR(10)##/// Функция возвращает значения: /##CHR(13)##//##CHR(10)##/// true - если кассовый чек успешно пробился в ККМ/##CHR(13)##//##CHR(10)##/// false - если в процессе возникла ошибка пробития чека/##CHR(13)##//##CHR(10)##/// /##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек, КОДУСТРОЙСТВАПЕЧАТИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка закрытия документа в ККМ и попытка его допечатать/##CHR(13)##//##CHR(10)##/ While (fptr.checkDocumentClosed() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос/##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось пробить кассовый чек (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и нажмите ""ОК"" ");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно/##CHR(13)##//##CHR(10)##/ While (fptr.continuePrint() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз./##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось напечатать документ (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и повторите.");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, ФискальныйЧек, _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ, ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/PUBLIC _ККТСУММАБЕЗНАЛ, ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, НомерЧекаККМ, НомерСменыККМ, _ОТДЕЛЬНЫЙСЛИПЕГАИС, _ВАРИАНТВЫВОДАШКЕГАИС, _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, _ШИРИНАШКЕГАИС, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ;/##CHR(13)##//##CHR(10)##/PUBLIC _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ, _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ, _РАБОТАСЕГАИС, _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ, НомерЛУПлатежнойСистемы, TerminalNumber, ЕстьНеявныеОшибкиПС, БанковскиеПозицииЧека, ИДТЕРМИНАЛАИЗПРОФИЛЯ, _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[0] = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию НЕ будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = true; //признак необходимости печати слипов ЕГАИС, true - печатать, false - не печатать (для исключительных ситуаций)/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = "cash";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= "electronically";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = "prepaid";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = "credit";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = "other";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/_КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ= 14; //количество дней возраста буфера чеков в ФН, который считается критичным и требует внимания пользователя (будет выведено сообщение)/##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///!!!ПОСЛЕ ИЗМЕНЕНИЯ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ ТРЕБУЕТСЯ ПЕРЕЗАПУСТИТЬ АЙТИДУ ДЛЯ ВСТУПЛЕНИЯ ИЗМЕНЕНИЙ В СИЛУ/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///переменные для оптимизации используемого пространства на чековой ленте при печати слипов ЕГАИС и для экономии чековой ленты/##CHR(13)##//##CHR(10)##///возможен вариант совмещенной печати слипа ЕГАИС вместе с кассовым чеком/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОТДЕЛЬНЫЙСЛИПЕГАИС = false; // признак необходимости печати слипа ЕГАИС отдельно от кассового чека. /##CHR(13)##//##CHR(10)##/ //Значения: true - Слип ЕГАИС печатается как отдельный нефискальный чек/##CHR(13)##//##CHR(10)##/ // false - Слип ЕГАИС печатается вместе с кассовым чеком/##CHR(13)##//##CHR(10)##/ ///##CHR(13)##//##CHR(10)##/_ВАРИАНТВЫВОДАШКЕГАИС = 2; //Вариант вывода QR-кода ЕГАИС на чеке. /##CHR(13)##//##CHR(10)##/ //Значения:/##CHR(13)##//##CHR(10)##/ // Вариант 1 - стандартно - (QR по центру, ссылка и цифровая подпись под ним снизу)/##CHR(13)##//##CHR(10)##/ // Вариант 2 - с оверлеем (ссылка слева, QR - справа, цифровая подпись - снизу) /##CHR(13)##//##CHR(10)##/ //!!!ВНИМАНИЕ. При использовании варианта = 2, чтобы QR не перекрывал ссылку, требуется тонкая подстройка значений следующих параметров:/##CHR(13)##//##CHR(10)##/ // _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _ШИРИНАШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС = 4; //Коэффициент увеличения QR ЕГАИС. По умолчанию равно 4. Для данного значения коэффициента ширина QR Егаис составляет 13 символов./##CHR(13)##//##CHR(10)##/ //При изменении значения коэффициента и использования _ВАРИАНТВЫВОДАШКЕГАИС равного 2 требуется ручная подгонка параметров, указанных в описании параметра _ВАРИАНТВЫВОДАШКЕГАИС. /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = 32; //Количество символов в строке, помещающееся на чековой ленте. Как правило для 57 ленты равно 32-36 символов, для 80й ленты - 48-64 символов (в зависимости от модели ККМ и используемого шрифта)./##CHR(13)##//##CHR(10)##/ //Данный параметр используется для вывода ШК ЕГАИС с оверлеем (_ВАРИАНТВЫВОДАШКЕГАИС = 2: ШК справа, ссылка слева), а так же для банковских слипов/##CHR(13)##//##CHR(10)##/ //ВАЖНО!!! - Данный параметр будет автоматически подстраиваться под используемую модель ККТ посредством выполнения обработки "ШиринаЛенты" данного профиля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШИРИНАШКЕГАИС = 13; //Количество символов строки, занимаемое QR-кодом ЕГАИС. Данный параметр расчитан экспериментальным путем для коэффициента увеличения QR ЕГАИС равным 4./##CHR(13)##//##CHR(10)##/ //Требует корректировки только при _ВАРИАНТВЫВОДАШКЕГАИС = 2 и изменении _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС на значение не равное стандартному (4)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ = 1; //Номер Шрифта ККМ для печати нефискальных (текстовых) строк. По умолчанию имеет значение равное 0, что соответствует шрифту, настроенному в параметрах ККМ./##CHR(13)##//##CHR(10)##/ //ВНИМАНИЕ!!! Изменение номера шрифта для нефискальной печати влияет на любую нефискальную печать профилем (слип ЕГАИС, банковские слипы, нефискальные строки в чеке)/##CHR(13)##//##CHR(10)##/ //При изменении номера шрифта на значение отличное от значения по умолчанию 0, требутеся корректировка значения переменной _ШИРИНАШКЕГАИС, если _ВАРИАНТВЫВОДАШКЕГАИС равен 2 /##CHR(13)##//##CHR(10)##///Прочие переменные/##CHR(13)##//##CHR(10)##/_КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ = true; //Переменная отвечает за необходимость контроля при открытии смены расхождения даты и времени в ККМ с датой и временем в ПК. /##CHR(13)##//##CHR(10)##/ //Если расхождение больше чем на _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ минут, то будет выведен запрос пользователю о синхронизации даты и времени/##CHR(13)##//##CHR(10)##/ // Значения: true - контроль даты и времени включен, false - контроль выключен/##CHR(13)##//##CHR(10)##/_ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ = 3; //Допустимое количество минут расхождения даты и времени. Значение по умолчания равно 3 минутам. /##CHR(13)##//##CHR(10)##/ //Разница времени с ККМ меньшая указанного количества минут считается нормальной и изменение даты/времени не осуществляется/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE ("_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ = false; //Необходимость вывода информации о начисленных и списанных бонусных баллах на чеке, а так же остаток бонусов. true - выводить, false - не выводить/##CHR(13)##//##CHR(10)##/ //Работает на версии 4.0.6 и выше, при использовании стандартной бонусной системы/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ = 128;/##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПЕРЕМЕННЫЕ ДЛЯ ПЛАТЕЖНОЙ СИСТЕМЫ - НАЧАЛО/##CHR(13)##//##CHR(10)##/ИДТЕРМИНАЛАИЗПРОФИЛЯ = true; //признак того что при банковских операциях ИД терминала будет подставляться из переменной TerminalNumber, а не из драйвера. Если false - то будет браться из драйвера./##CHR(13)##//##CHR(10)##/НомерЛУПлатежнойСистемы = 1; //номер логического устройства в драйвере ПС Атол/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 2; //число копий банковских слипов (по умолчанию 2)/##CHR(13)##//##CHR(10)##/_БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ = true; //признак необходимости печати банковского слипа вместе с кассовым чеком. /##CHR(13)##//##CHR(10)##/ // Значения: true - слип печатается вместе с кассовым чеком, false - слип печатается отдельным нефискальным чеком/##CHR(13)##//##CHR(10)##/ //Если _КОЛИЧЕСТВОКОПИЙСЛИПА больше чем 1, то вместе с чеком печатается только один слип, остальные печатаются как нефискальные/##CHR(13)##//##CHR(10)##///ПЕРЕМЕННЫЕ ДЛЯ ПЛАТЕЖНОЙ СИСТЕМЫ - КОНЕЦ',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL(ДанныеСтатусСмены.number) + ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ Статус = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN Статус;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Статус = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении статуса смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Статус;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ВозврастБуфераДней; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерСменыККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ СтатусСмены = ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "state", "" );/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "number", "" ) ); //+ ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера смены. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", "5", "0" ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = "0"; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = 0;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/СменаОткрытаВККМ = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерЧекаККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусФН = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getFnStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусФН);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусФН = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусФН, "fnStatus", "" ), "fiscalDocumentNumber", "" ) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера чека ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (SPLITPSYSTEM == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ROUND( _ККТСУММАБЕЗНАЛ, 2);/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ IF ( SPLITPSYSTEM <> true )/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/IF (ЭТОРМК)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать комментария после фискальных строк и перед оплатой/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, mode, checktype, name)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', 2, ''left'', ''" + STDF(КОММЕНТАРИЙ) + "'' )" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans WHERE equipment = ''" + КОДОБОРУДОВАНИЯ + "'' ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans WHERE equipment = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, DriverPayCard.Text, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати сверки итогов на ФР", "Ошибка сверки итогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ДОПОЛНИТЕЛЬНЫЕ ПРОВЕРКИ ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /* //отмену чека не делаем, потому как это произойдет автоматически при передаче запроса закрытия смены /##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены в ККМ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СостояниеСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ СменаОткрыта = СостояниеСмены == "opened" OR СостояниеСмены == "expired";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СменаОткрыта <> true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена закрыта в ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КОНЕЦ ДОПОЛНИТЕЛЬНЫХ ПРОВЕРОК ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЗакрытияСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""closeShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаЗакрытияСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветЗакрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ЗакрытиеСмены",ОтветЗакрытиеСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("ЗакрытиеСмены") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗакрытияСмены", fiscalParams);/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = РезультатЗакрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерФД = РезультатЗакрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = РезультатЗакрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ НомерФН = РезультатЗакрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = РезультатЗакрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = РезультатЗакрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = РезультатЗакрытияСмены.receiptsCount;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияСмены", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ ОтчетНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ОтчетНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Z-Отчет не допечатался на ККМ" + CHR(13) + "Допечатать отчет?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати отчета", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Z-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 0 - гашение контрольной ленты /##CHR(13)##//##CHR(10)##/// 3 - краткий фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 4 - краткий фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 5 - полный фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 6 - полный фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// 10 - отчет о продажах по часам/##CHR(13)##//##CHR(10)##/// 11 - отчет по количеству/##CHR(13)##//##CHR(10)##/// 22 - ЭКЛЗ итоги активизации/##CHR(13)##//##CHR(10)##/// 23 - ЭКЛЗ итоги смены/##CHR(13)##//##CHR(10)##/// 24 - ЭКЛЗ контрольная лента смены/##CHR(13)##//##CHR(10)##/// 26 - ЭКЛЗ по датам краткий по отделам/##CHR(13)##//##CHR(10)##/// 27 - ЭКЛЗ по датам полный по отделам/##CHR(13)##//##CHR(10)##/// 28 - ЭКЛЗ по датам краткий по итогам смен/##CHR(13)##//##CHR(10)##/// 29 - ЭКЛЗ по датам полный по итогам смен/##CHR(13)##//##CHR(10)##/// 30 - ЭКЛЗ по сменам краткий по отделам/##CHR(13)##//##CHR(10)##/// 31 - ЭКЛЗ по сменам полный по отделам/##CHR(13)##//##CHR(10)##/// 32 - ЭКЛЗ по сменам краткий по итогам/##CHR(13)##//##CHR(10)##/// 33 - ЭКЛЗ по сменам полный по итогам/##CHR(13)##//##CHR(10)##/// 41 - копия последнего чека/##CHR(13)##//##CHR(10)##/// 42 - отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/// 50 - сверка итогов/##CHR(13)##//##CHR(10)##/// 100 - печать копии чека по номеру ФД/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 11 ) OR ВСПИСКЕ( ТипОтчета, 22, 23, 24, 41, 42, 50, 100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 42 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //получим информацию о кассире/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportOfdExchangeStatus"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по секциям/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_DEPARTMENTS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 8 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по кассирам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OPERATORS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 9 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по товарам по суммам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по часам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_HOURS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 11 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет количеств/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_QUANTITY);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 22 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Печать итогов регистрации / перерегистрации/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_REGISTRATIONS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 23 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Счетчики итогов ФН/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 24 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //отчет по товарам по СНО/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //сверка итогов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans WHERE TerminalID = ''" + TerminalNumber + "'' ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans WHERE TerminalID = ''" + TerminalNumber + "''" );/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, DriverPayCard.Text, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати сверки итогов на ФР", "Ошибка сверки итогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 100 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = true;/##CHR(13)##//##CHR(10)##/ //проверим что номер чека передан, т.е. выбрали конкретный чек из списка или номер у выбранного чека не равен 0/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( VAL(НОМЕРЧЕКА) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не выбран кассовый чек для печати копии", "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ПечатаемКопию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //копия чека по номеру ФД/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, НОМЕРЧЕКА);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Отчет №" + ТипОтчета + ": Данный отчет не поддерживается профилем оборудования" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАОТКРЫТИЯДРАЙВЕРА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF (ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Перед настройкой драйвера оборудования необходимо записать карточку торгового оборудования");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Показать свойства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера." + CHR(13) + "Возможно не установлен драйвер ККТ АТОЛ версии 10 (32х разрядный).","Ошибка загрузки драйвера");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT TOP 1 value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( fptr.ShowProperties(fptr.LIBFPTR_GUI_PARENT_NATIVE, 0) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = fptr.getSettings();/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + НастройкиККТ + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОШИБКАОТКРЫТИЯДРАЙВЕРА == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось открыть окно настроек драйвера");/##CHR(13)##//##CHR(10)##/ ///*/##CHR(13)##//##CHR(10)##/ ВОПРОС = "Инициализировать сохраненные настройки связи значениями поумолчанию?";/##CHR(13)##//##CHR(10)##/ IF (СООБЩЕНИЕ(Вопрос,"Настройка связи с ККТ", 4) == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //удалим параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Сохраненные настройки ККТ удалены. Попытайтесь открыть диалоговое окно драйвера еще раз.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //*//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки (из доп. кода)/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ", /##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", "1", "4" ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)]; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", "1", "4" ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СменаОткрытаВККМ = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаОткрытаВККМ == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена открыта в ККМ", "Ответ ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "В ККМ """ + ALLTRIM(ИмяОборудования) + """ не открыта смена." + CHR(13) + "Произвести открытие смены в ККМ?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(ТекстВопроса,"Открытие смены", 4);/##CHR(13)##//##CHR(10)##/ IF ( КодОтвета == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветОткрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("ОткрытиеСмены",ОтветОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатОткрытияСмены",ОткрытиеСмены.fiscalParams);/##CHR(13)##//##CHR(10)##/ //НомерСменыККМ = РезультатОткрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ //НомерФД = РезультатОткрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ //НомерФН = РезультатОткрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ //ПодписьФД = РезультатОткрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ //РегНомер = РезультатОткрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ //ДатаВремяФД = РезультатОткрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатОткрытияСмены");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия смены в ККМ. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеЯщика = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openCashDrawer""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеЯщика);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия денежного ящика. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (SPLITPSYSTEM == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ROUND( _ККТСУММАБЕЗНАЛ, 2);/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ IF ( SPLITPSYSTEM <> true )/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ККТ_ШИРИНА_ЛЕНТЫ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ RETURN _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = 27;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = VAL(ДанныеИнфоККТ.receiptLineLength);/##CHR(13)##//##CHR(10)##/ //ШиринаЛентыПикселей = VAL(ДанныеИнфоККТ.receiptLineLengthPix);/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении ширины ленты ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ККТ_ШИРИНА_ЛЕНТЫ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'ВерсияПрофиля = "v.5.15"; /##CHR(13)##//##CHR(10)##/// Имя устройства ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceName = "ККМ АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN "(" + ВерсияБиблиотеки + ") ДРАЙВЕР ККТ АТОЛ v.10 НЕ УСТАНОВЛЕН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ modelName = ДанныеИнфоККТ.modelName;/##CHR(13)##//##CHR(10)##/ serial = ДанныеИнфоККТ.serial;/##CHR(13)##//##CHR(10)##/ firmwareVersion = ДанныеИнфоККТ.firmwareVersion;/##CHR(13)##//##CHR(10)##/ configurationVersion = ДанныеИнфоККТ.configurationVersion;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( configurationVersion ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с версией платформы в БД/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); //удаляем параметр, чтобы не дублировался при записи/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ); /##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + ЕСЛИ(LEFT(configurationVersion, 1) == "5", 1, 0) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ fiscal = ДанныеСтатусККТ.fiscal;/##CHR(13)##//##CHR(10)##/ shift = ДанныеСтатусККТ.shift;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( shift == "opened" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена открыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "closed" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена закрыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "expired" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена > 24ч";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "";/##CHR(13)##//##CHR(10)##/ //deviceName = modelName + ", №" + serial + ", v." + firmwareVersion + ", " + ЕСЛИ(fiscal == true, "ФИСК", "НЕФИСК") + ", Версия прошивки ККТ: " + configurationVersion + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияПрофиля + ") " + modelName + ", №" + serial + ", v." + configurationVersion + ", " + ЕСЛИ(fiscal == "true" OR fiscal == true, "ФИСК", "НЕФИСК") + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STATUS);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ deviceName = fptr.getParamString(fptr.LIBFPTR_PARAM_MODEL_NAME) + ", №" + fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER) + /##CHR(13)##//##CHR(10)##/ ", v." + fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION) + ", " + ЕСЛИ(fptr.getParamBool(fptr.LIBFPTR_PARAM_FISCAL) == true, "ФИСК", "НЕФИСК");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияБиблиотеки + ") Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN "Копия последнего чека|41;Отчет о состоянии расчетов|42;Отчет по секциям|7;Отчет по кассирам|8;Отчет по товарам по суммам|9;Отчет по часам|10;Отчет количеств|11;/##CHR(13)##//##CHR(10)##/Печать итогов регистрации / перерегистрации|22;Счетчики итогов ФН|23;Отчет по товарам по СНО|24;Сверка итогов платежной системы|50";',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(КОДОБОРУДОВАНИЯ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /* //проверка не нужна, т.к. она происходит автоматически при отправке запроса с заданием/##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаХОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportX"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаХОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Х-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/fptr = false;/##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВнесение = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashIn"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВнесение);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВнесение = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Внесение",ОтветВнесение);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВнесение",Внесение.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВнесение.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВнесение");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка внесения денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВыплата = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashOut"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВыплата);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВыплата = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Выплата",ОтветВыплата);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВыплата",Выплата.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВыплата.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВыплата");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выплаты денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"[", "(");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"]", ")");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция КАС_ПолучитьGTIN_SERIAL_ИзШтрихкодаМаркировки()/##CHR(13)##//##CHR(10)##///Описание: Получает gtin и серийный номер из штрихкода маркировки по типу маркировки и возвращает общую длинну кода маркировки без крпиптохвоста/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Параметры: /##CHR(13)##//##CHR(10)##/// ШтрихкодМаркировки - штрихкод марки, из которого извлекаем gtin и serial/##CHR(13)##//##CHR(10)##/// ТипМаркировки - строка, тип маркировки, по которому определяем какое количество символов serial брать из ШтрихкодаМаркировки/##CHR(13)##//##CHR(10)##/// gtin - экспортный параметр, заполняется полученным значением gtin/##CHR(13)##//##CHR(10)##/// serial - экспортный параметр, заполняется полученным значением serial/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьДлиннуШтрихкодаМаркировки(ШтрихкодМаркировки, ТипМаркировки, gtin, serial)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = 1; //определеяем начало символов расположения GTIN в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ //если встретили первыми двумя символами идентификатор 01, то смещаем начало чтения GTIN/##CHR(13)##//##CHR(10)##/ IF ( LEFT( ШтрихкодМаркировки, 2 ) == "01" ) /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = НачалоСимволовGTIN + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ GTIN/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШтрихкодМаркировки, НачалоСимволовGTIN, 14);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = LEN(gtin) + НачалоСимволовGTIN; // вычисляем начало символов расположения SERIAL в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, 2) == "21" ) //если сразу после GTIN встретили идентификатор 21, то смещаем начало чтения серийного номера на 2 символа/##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = НачалоСимволовSERIAL + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //наиболее распространенный вариант/##CHR(13)##//##CHR(10)##/ //далее по типу маркировки определим сколько символов необходимо брать для SERIAL/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //табак/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "1520" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //обувь/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0003" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //лекарства/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0002" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //шубы/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9999" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //прочая/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9996" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //фото/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9995" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //парфюм/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9997" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //шины/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9998" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //легпром/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9994" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //АТП/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ SERIAL/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, КоличествоСимволовSERIAL);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлиннаКода = НачалоСимволовSERIAL + КоличествоСимволовSERIAL - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для табака будем возвращать нулевую длинну, чтобы шк марки не изменился при передаче/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" )/##CHR(13)##//##CHR(10)##/ ДлиннаКода = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ДлиннаКода;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция проверяет выполнение равенства выражения "Количество*Цена = Сумма" для позиций чека и при необходимости разделяет позиции чека на две, если в одной позиции такого равенства невозможно добиться/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПроизвестиФорматноЛогическийКонтроль()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ККТ_ИСПОЛЬЗОВАТЬФЛК", true ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождениеФЛК = VAL( ПЕРЕМЕННАЯ( "_ККТ_ДОПУСТИМОЕРАСХОЖДЕНИЕФЛК", 0.01 ) ); // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //вычислим номер первой строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПервойСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column ASC");/##CHR(13)##//##CHR(10)##/ //вычислим номер последней строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПоследнейСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column DESC");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся до первой строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column < " + НомерПервойСтрокиТовара,"НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отдельно обработаем позиции чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column", "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПозицииЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоТовара = VAL( ПозицииЧека.quantity );/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( ПозицииЧека.summa );/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = VAL( ПозицииЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ Наименование = ПозицииЧека.name;/##CHR(13)##//##CHR(10)##/ _Цена_Учет = VAL( ПозицииЧека._price_u );/##CHR(13)##//##CHR(10)##/ СекцияККМ = ПозицииЧека.department;/##CHR(13)##//##CHR(10)##/ КодНалога = ПозицииЧека.kodn;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = ПозицииЧека.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчета = ПозицииЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПарольОперации = ПозицииЧека.password;/##CHR(13)##//##CHR(10)##/ ИмяОперации = ПозицииЧека.operation;/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ПозицииЧека.marktype;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ПозицииЧека.markbc;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = VAL( ПозицииЧека.price ); /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ЭТОРМК )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = ROUND( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ + VAL( ПЕРЕМЕННАЯ( "_ВСЕГООПЛАТАБОНУСАМИ", 0) ) - СУММАОПЛАТЫ, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ <> 0 AND ОстатокОтСуммыРасчетной <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( СуммаТовара - ОстатокОтСуммыРасчетной, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции + ОстатокОтСуммыРасчетной;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = 0.000;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //} /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = 0;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СуммаТовара / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = ROUND( КоличествоТовара * РасчетнаяЦена, 2 );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СуммаТовара;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ //IF ( РазницаСумм =< -1*ДопустимоеРасхождениеФЛК OR РазницаСумм >= ДопустимоеРасхождениеФЛК)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ABS( РазницаСумм ), 2 ) >= ROUND( ДопустимоеРасхождениеФЛК, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = ROUND( КоличествоТовара, 3 );/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ //ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = ROUND( РазницаСумм / 0.01, 3 );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - ROUND( РазницаСумм / КоличествоПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчитаем новую сумму с округлением до 2х знаков, /##CHR(13)##//##CHR(10)##/ //все что меньше или равно 0.005 округляем в меньшую сторону, а 0.006- 0.009 - в большую/##CHR(13)##//##CHR(10)##/ //чтобы достичь округления в меньшую сторону, вычтем 0.0001. /##CHR(13)##//##CHR(10)##/ //Так, например, число 10.245 приведем к 10.2449, что с округлением до двух знаков получится равным 10.24/##CHR(13)##//##CHR(10)##/ СуммаНовая = ROUND( КоличествоНовое * РасчетнаяЦена - 0.0001, 2 ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение. /##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки > КоличествоНовое )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ROUND(ТекущаяСкидка * КоличествоПереоценки / КоличествоТовара, 2 );/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ROUND(ТекущаяСкидка * КоличествоНовое / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ТекущаяСкидка - СуммаСкидокРасчетная;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ //СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //получить часть штрихкодов маркировки, если позиция маркированная и с несколькими марками/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ШтрихКодМаркировки) AND VAL(ТипМаркировки) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки = 1;/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиВрем = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ WHILE (КоличествоШКМаркировки <= КоличествоНовое)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировкиВрем, РазделительМарок, КоличествоШКМаркировки );/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый += ЕСЛИ( !ПУСТО(ШтрихКодМаркировкиНовый), "|", "") + Марка;/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = AT( ШтрихКодМаркировки, "|", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ IF ( ПозицияРазделителяСлева == 0 )/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = LEN( ШтрихКодМаркировки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировки, ПозицияРазделителяСлева );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировкиНовый, LEN( ШтрихКодМаркировкиНовый ) - 1 );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", РасчетнаяЦена );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидокНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиНовый);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Добавлена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоНовое, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( РасчетнаяЦена, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидокНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиНовый); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( КоличествоПереоценки * ЦенаПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировки, LEN( ШтрихКодМаркировки ) - LEN( ШтрихКодМаркировкиНовый ) );/##CHR(13)##//##CHR(10)##/ IF ( ЛЕВСИМВ( ШтрихКодМаркировкиОстаток, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = LEFT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем строку /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", ЦенаТоварнойПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидкиПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиОстаток);/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Изменена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( ЦенаТоварнойПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидкиПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиОстаток); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнуление переменных/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ _Цена_Учет = 0.000; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ //\ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПозицииЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся после последней строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column > " + НомерПоследнейСтрокиТовара,"ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //теперь удалим все строки из таблицы позиций/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM " + ИмяТаблицыСтрокЧека);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //и загрузим в неё данные из сформированных контекстов/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР(КОДУСТРОЙСТВАПЕЧАТИ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ЧЕКНАИМЕНОВАНИЕ, false, "text", "center", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ), false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫВОД QR КОДА НА ЧЕКЕ/##CHR(13)##//##CHR(10)##/ IF ( _ВАРИАНТВЫВОДАШКЕГАИС == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 1: вывода ШК по центру без оверлея и все подписи под ШК кодом по центру/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""center""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //ссылка ЕГАИС под QR кодом/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_url, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 2: (ШК справа, ссылка слева и цифровая подпись снизу/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""right"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Определим параметры печати с оверлеем./##CHR(13)##//##CHR(10)##/ //Чтобы ссылка егаис не скрывалась под QR кодом, разобъем её на подстроки и выведем эти подстроки слева от QR кода/##CHR(13)##//##CHR(10)##/ ТекстСсылкиЕГАИС = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ ШиринаПечатиСсылки = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ - _ШИРИНАШКЕГАИС;/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = LEN(ТекстСсылкиЕГАИС);/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок = ЦЕЛОЕ( КоличествоСимволовВссылке/ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСимволовВссылке % ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) <> 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Оверлей = "/##CHR(13)##//##CHR(10)##/ ""overlay"": [";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 1;/##CHR(13)##//##CHR(10)##/ FOR ( index = 1; index <= КоличествоПодстрок ; index++ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = ЕСЛИ(КоличествоСимволовВссылке - ШиринаПечатиСсылки <= 0, КоличествоСимволовВссылке, КоличествоСимволовВссылке - ШиринаПечатиСсылки); /##CHR(13)##//##CHR(10)##/ ТекстПодстроки = SUBSTR( ТекстСсылкиЕГАИС, НачальнаяПозиция, ЕСЛИ( index == КоличествоПодстрок, КоличествоСимволовВссылке, ШиринаПечатиСсылки ) );/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = НачальнаяПозиция + ШиринаПечатиСсылки;/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + ЕСЛИ( ПРАВСИМВ( Оверлей, 1 ) == "}", ",", "" ) + "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + ТекстПодстроки + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": ""left"",/##CHR(13)##//##CHR(10)##/ ""wrap"": ""chars"",/##CHR(13)##//##CHR(10)##/ ""font"":" + VAL( _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ ) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрывающая оверлей квадратная скобка/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //соберем объект для печати QR кода со ссылкой/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = НоваяСтрокаШК + Оверлей + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ //добавим полученный объект со штрихкодом к позициям чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //далее цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОТДЕЛЬНЫЙСЛИПЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, "" );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": true";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА") == "U")/##CHR(13)##//##CHR(10)##/ _ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == true AND ЦенаУчетная == 0)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == false AND ЦенаУчетная == 0) /##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ЦенаУчетная;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //константа. отвечающая за необходимость скрывать все наценки/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРСКРЫВАТЬВСЕНАЦЕНКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ФРСКРЫВАТЬВСЕНАЦЕНКИ = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРСКРЫВАТЬВСЕНАЦЕНКИ == true)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //для ККТ на 5й платформе цена позиции должна указываться уже со скидками/##CHR(13)##//##CHR(10)##/ ЭтоПлатформа5 = VAL( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ) == 1;/##CHR(13)##//##CHR(10)##/ IF (ЭтоПлатформа5)/##CHR(13)##//##CHR(10)##/ {*//##CHR(13)##//##CHR(10)##/ //09.03.2021 - изменение алгоритма пробития скидок на единый для всех платформ ККТ./##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ROUND(СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара), 2);/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "partialPayment"; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "credit"; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ = false; //признак необходимости выводить букву [М] для товарной позиции в чеке средствами профиля. По умолчанию отключено (значение false),/##CHR(13)##//##CHR(10)##/ //т.к. ожидается что буква [М] будет выводиться средствами прошивки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //***/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162") == "U")/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 = false; //признак необходимости использовать старый формат тэга 1162 для чеков. По умолчанию равен false, т.е. используется новый формат/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = КомандыЧека.markbc;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) <> 0 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец разбора списка марок/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/ IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ //Цена = СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ //ЦенаПродажиПозиции = Цена;/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = ЦенаПродажиПозиции;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( ЕСЛИ(_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ == true AND !ПУСТО( КомандыЧека.markbc ), "(М) ","") + КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128 ) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + Количество + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( Сумма, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 7 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""tobacco"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""medicines"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 19, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""shoes"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ = false; //признак необходимости передавать весь код маркировки в составе реквизитов чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = ШКМарки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = 0;/##CHR(13)##//##CHR(10)##/ gtin = "";/##CHR(13)##//##CHR(10)##/ serial = "";/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = ПолучитьДлиннуШтрихкодаМаркировки(ШКМарки, КомандыЧека.marktype, gtin, serial);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДлинаКодаМаркировки > 0 )/##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = LEFT( ШКМарки, ДлинаКодаМаркировки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ markingCode = ПЕРЕКОДИРОВАТЬ( ALLTRIM( ШтрихкодМаркировкиДляЧека ), "", "BASE64" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""markingCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""other"",/##CHR(13)##//##CHR(10)##/ ""mark"": """ + markingCode + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТекстМаркировка = "," + CHR(13) + """nomenclatureCode"": """ + markingCode + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем текст маркировки в позиции и завершаем объект позиции/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += ТекстМаркировка + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара -= Количество;/##CHR(13)##//##CHR(10)##/ СуммаПозиции -= Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, 128 ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КоличествоТовара + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += "}";/##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека;/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ //добавим банковский слип, если установлен режим печати слипа вместе с чеком/##CHR(13)##//##CHR(10)##/ IF ( _БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ == true AND !ПУСТО( БанковскиеПозицииЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека += ЕСЛИ( ПРАВСИМВ(ТекстЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""preItems"": [/##CHR(13)##//##CHR(10)##/ " + БанковскиеПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека += ЕСЛИ( ПРАВСИМВ(ТекстЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим информацию о бонусах в чек/##CHR(13)##//##CHR(10)##/ IF (_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ == true AND !ПУСТО( НОМЕРКАРТЫ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ТИПБОНУСА= ЗАПРОС( "SELECT bonusalias FROM sprbonus WHERE code IN ( SELECT bonus FROM sprmcard WHERE cardn = ''" + НОМЕРКАРТЫ + "'' )" );/##CHR(13)##//##CHR(10)##/ ОПЛАЧЕНОБОНУСОМ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''-'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ НАЧИСЛЕНОБОНУСОВ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''+'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ ОСТАТОКБОНУСОВ = STR( ЗАПРОС( "SELECT dbo.fn_calccard_bonus( ''" + НОМЕРКАРТЫ + "'', ''" + ТИПБОНУСА + "'', DEFAULT );" ), 10, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Списано бонусов: " + ОПЛАЧЕНОБОНУСОМ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Начислено бонусов: " + НАЧИСЛЕНОБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Остаток бонусов: " + ОСТАТОКБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE("_СУММАСКИДКИВСЕГО") == "I" OR TYPE("_СУММАСКИДКИВСЕГО") == "B")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _СУММАСКИДКИВСЕГО > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Ваша экономия составила: " + STR(_СУММАСКИДКИВСЕГО, 10, 2) + " руб.", false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" );/##CHR(13)##//##CHR(10)##/ //если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/ IF ( РезультатПечатиЧека == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" ); //повторим печать чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ //ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ //IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец повтора печати чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки драйвера.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.CurrentDeviceNumber = НомерЛУПлатежнойСистемы;/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР("");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##///ФУНКЦИИ ДЛЯ РАБОТЫ ПЛАТЕЖНОЙ СИСТЕМЫ - НАЧАЛО/##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ БанковскиеПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МРППЕЧАТАТЬКЛИШЕНАСЛИПЕ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( ( Результат >= 0 ) OR ( Результат <= -10000 AND Результат > -11000 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( equipment, AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + КОДОБОРУДОВАНИЯ + "'', ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " +/##CHR(13)##//##CHR(10)##/ DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ(ИДТЕРМИНАЛАИЗПРОФИЛЯ == true, TerminalNumber, DriverPayCard.TerminalID) + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT TOP 1 code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ //обработка ситуаций с Автоотменой и "Не оплачено"/##CHR(13)##//##CHR(10)##/ СтрокаНеявныхОшибокПС = "АВТООТМЕНА,НЕ ОПЛАЧИВАТЬ";/##CHR(13)##//##CHR(10)##/ ЕстьНеявныеОшибкиПС = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО( ALLTRIM( DriverPayCard.Text ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ATC( СтрокаНеявныхОшибокПС, UPPER( ALLTRIM( DriverPayCard.Text ) ) ) > 0 AND UPPER( ALLTRIM( DriverPayCard.Text ) ) <> "ОТМЕНА" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьНеявныеОшибкиПС = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, DriverPayCard.Text, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если установлен режим печати банковского слипа вместе с кассовым чеком и это первый слип и нет неявных ошибок ПС, /##CHR(13)##//##CHR(10)##/ //то запомним позиции банковского слипа для их последующего добавления к позициям кассового чека/##CHR(13)##//##CHR(10)##/ //При наличии неявных ошибок слип нужно все таки вывести пользователю для обработки результата/##CHR(13)##//##CHR(10)##/ IF (_БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ == true AND НОМЕРКОПИИСЛИПА == 0 AND !ЕстьНеявныеОшибкиПС )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запомним первый слип /##CHR(13)##//##CHR(10)##/ БанковскиеПозицииЧека = ПозицииЧека;/##CHR(13)##//##CHR(10)##/ //текущий слип очистим, чтобы не напечатался/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если встретили "Автоотмена" или "Не оплачивать", то выдаем пользователю информацию и предлагаем прервать или продолжить чек/##CHR(13)##//##CHR(10)##/ IF ( ЕстьНеявныеОшибкиПС )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Пожалуйста, обратите внимание на банковский слип. " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Вероятно данная операция не прошла через платежную систему." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Продолжить формирование кассового чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"ВНИМАНИЕ!!!",4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==7) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false; //возвращаем ошибку операции через ПС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФУНКЦИИ ДЛЯ РАБОТЫ ПЛАТЕЖНОЙ СИСТЕМЫ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 1024 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), /##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), marktype char(10), markbc varchar(MAX), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) AND _РАБОТАСЕГАИС )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("КОНТРАГЕНТ") == "U")/##CHR(13)##//##CHR(10)##/ КОНТРАГЕНТ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БанковскиеПозицииЧека = "";',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой АТОЛ','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Атол с поддержкой работы по ФФД 1.0 - 1.05./##CHR(13)##//##CHR(10)##/Встроена возможность работы с платежной системой по старому варианту через драйвер ПС Атол',0.00000000,7386.00000000,0,'',0.00000000,'','',0,'1AB39C7B-2271-48C7-9D9E-707E799C1BC0',0,1,0,'28.09.2022 12:19:04') #begin #description Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой СБЕРБАНК #name Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой СБЕРБАНК #code 0000000168 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР. /##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = 0;/##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/СменаОткрытаВККМ = false;/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", "5", "0" ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10)), nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = "0"; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'// Номер смены в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерСменыККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ СтатусСмены = ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "state", "" );/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусСмены, "shiftStatus", "" ), "number", "" ) ); //+ ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера смены. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерСменыККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'// Номер чека в ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(НомерЧекаККМ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусФН = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getFnStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусФН);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусФН = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ НомерЧекаККМ = VAL( ПОЛЕ_JSON( ПОЛЕ_JSON( ОтветСтатусФН, "fnStatus", "" ), "fiscalDocumentNumber", "" ) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера чека ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка получения номера чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN НомерЧекаККМ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',105.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'// Печать Z-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"[", "(");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"]", ")");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans WHERE equipment = ''" + КОДОБОРУДОВАНИЯ + "'' ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки компонент Сбербанка.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.NFun(6000);/##CHR(13)##//##CHR(10)##/ IF ( Результат <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans WHERE equipment = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоПустыхСтрок = 0;/##CHR(13)##//##CHR(10)##/ //получаем слип-чек и добавляем в чек/##CHR(13)##//##CHR(10)##/ СлипЧек = DriverPayCard.GParamString("Cheque"); /##CHR(13)##//##CHR(10)##/ РазделительСтрок = CHR(10);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа = 1;/##CHR(13)##//##CHR(10)##/ СлипЧекВрем = РазделительСтрок + СлипЧек;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( СтрокаСлипа ) OR КоличествоПустыхСтрок < 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, СтрокаСлипа, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа++;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(СтрокаСлипа))/##CHR(13)##//##CHR(10)##/ КоличествоПустыхСтрок++;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КоличествоПустыхСтрок = 0;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати сверки итогов на ФР", "Ошибка сверки итогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ДОПОЛНИТЕЛЬНЫЕ ПРОВЕРКИ ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /* //отмену чека не делаем, потому как это произойдет автоматически при передаче запроса закрытия смены /##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены в ККМ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СостояниеСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ СменаОткрыта = СостояниеСмены == "opened" OR СостояниеСмены == "expired";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СменаОткрыта <> true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена закрыта в ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КОНЕЦ ДОПОЛНИТЕЛЬНЫХ ПРОВЕРОК ПЕРЕД ЗАКРЫТИЕМ СМЕНЫ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаЗакрытияСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""closeShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаЗакрытияСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ОтветЗакрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ЗакрытиеСмены",ОтветЗакрытиеСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("ЗакрытиеСмены") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗакрытияСмены", fiscalParams);/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = РезультатЗакрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерФД = РезультатЗакрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = РезультатЗакрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ НомерФН = РезультатЗакрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = РезультатЗакрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = РезультатЗакрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = РезультатЗакрытияСмены.receiptsCount;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияСмены", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ ОтчетНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ОтчетНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Z-Отчет не допечатался на ККМ" + CHR(13) + "Допечатать отчет?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати отчета", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ЗакрытиеСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Z-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'// Открытие смены ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Заголовок строка, имя оператора открывающего смену/##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим возраст буфера чеков/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец проверки возраста буфера чеков/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСмены",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСмены.shiftStatus);/##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СменаОткрытаВККМ = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СменаОткрытаВККМ == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Смена открыта в ККМ", "Ответ ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "В ККМ """ + ALLTRIM(ИмяОборудования) + """ не открыта смена." + CHR(13) + "Произвести открытие смены в ККМ?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(ТекстВопроса,"Открытие смены", 4);/##CHR(13)##//##CHR(10)##/ IF ( КодОтвета == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //открываем смену/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openShift"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветОткрытиеСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("ОткрытиеСмены",ОтветОткрытиеСмены);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатОткрытияСмены",ОткрытиеСмены.fiscalParams);/##CHR(13)##//##CHR(10)##/ //НомерСменыККМ = РезультатОткрытияСмены.shiftNumber;/##CHR(13)##//##CHR(10)##/ //НомерФД = РезультатОткрытияСмены.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ //НомерФН = РезультатОткрытияСмены.fnNumber;/##CHR(13)##//##CHR(10)##/ //ПодписьФД = РезультатОткрытияСмены.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ //РегНомер = РезультатОткрытияСмены.registrationNumber;/##CHR(13)##//##CHR(10)##/ //ДатаВремяФД = РезультатОткрытияСмены.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатОткрытияСмены");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("ОткрытиеСмены");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия смены в ККМ. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (SPLITPSYSTEM == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки компонент Сбербанка.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Department", НомерЛУПлатежнойСистемы);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ТипЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.NFun(6004);/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //закомментировано, т.к. если авторизация не выполнена, то платеж не проведен через ПС, следовательно и отменять нечего/##CHR(13)##//##CHR(10)##/ //отмена транзакции/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.NFun(4003);/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ReferenceNumber = DriverPayCard.GParamString("RRN");/##CHR(13)##//##CHR(10)##/ //DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ //DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ //ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/IF (ЭТОРМК)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать комментария после фискальных строк и перед оплатой/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, mode, checktype, name)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', 2, ''left'', ''" + STDF(КОММЕНТАРИЙ) + "'' )" );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// отмена или подтверждение авторизации платежной системы/##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O" )/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ IF ( Результат == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //подтверждаем транзакцию/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6001);/##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ЗАФИКСИРОВАТЬ БАНКОВСКУЮ ТРАНЗАКЦИЮ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Производится отмена транзакции через платежную систему" );/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6004); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ПРОИЗВЕСТИ АВАРИЙНУЮ ОТМЕНУ БАНКОВСКОЙ ТРАНЗАКЦИИ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ,2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4003); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ОТМЕНИТЬ БАНКОВСКУЮ ТРАНЗАКЦИЮ");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ IF ( SPLITPSYSTEM <> true )/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'// Печать прочих отчетов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// ТипОтчета число целое, тип требуемого отчета/##CHR(13)##//##CHR(10)##/// Значения: 0 - гашение контрольной ленты /##CHR(13)##//##CHR(10)##/// 3 - краткий фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 4 - краткий фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 5 - полный фискальный отчет по диапазону дат/##CHR(13)##//##CHR(10)##/// 6 - полный фискальный отчет по диапазону смен/##CHR(13)##//##CHR(10)##/// 7 - отчет о продажах по секциям/##CHR(13)##//##CHR(10)##/// 8 - отчет о продажах по кассирам/##CHR(13)##//##CHR(10)##/// 9 - отчет о продажах по товарам/##CHR(13)##//##CHR(10)##/// 10 - отчет о продажах по часам/##CHR(13)##//##CHR(10)##/// 11 - отчет по количеству/##CHR(13)##//##CHR(10)##/// 22 - ЭКЛЗ итоги активизации/##CHR(13)##//##CHR(10)##/// 23 - ЭКЛЗ итоги смены/##CHR(13)##//##CHR(10)##/// 24 - ЭКЛЗ контрольная лента смены/##CHR(13)##//##CHR(10)##/// 26 - ЭКЛЗ по датам краткий по отделам/##CHR(13)##//##CHR(10)##/// 27 - ЭКЛЗ по датам полный по отделам/##CHR(13)##//##CHR(10)##/// 28 - ЭКЛЗ по датам краткий по итогам смен/##CHR(13)##//##CHR(10)##/// 29 - ЭКЛЗ по датам полный по итогам смен/##CHR(13)##//##CHR(10)##/// 30 - ЭКЛЗ по сменам краткий по отделам/##CHR(13)##//##CHR(10)##/// 31 - ЭКЛЗ по сменам полный по отделам/##CHR(13)##//##CHR(10)##/// 32 - ЭКЛЗ по сменам краткий по итогам/##CHR(13)##//##CHR(10)##/// 33 - ЭКЛЗ по сменам полный по итогам/##CHR(13)##//##CHR(10)##/// 41 - копия последнего чека/##CHR(13)##//##CHR(10)##/// 42 - отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/// 50 - сверка итогов/##CHR(13)##//##CHR(10)##/// 100 - печать копии чека по номеру ФД/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"[", "(");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"]", ")");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 11 ) OR ВСПИСКЕ( ТипОтчета, 22, 23, 24, 41, 42, 50, 100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ТипОтчета == 41 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 42 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //получим информацию о кассире/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportOfdExchangeStatus"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по секциям/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_DEPARTMENTS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 8 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по кассирам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OPERATORS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 9 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по товарам по суммам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет по часам/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_HOURS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 11 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Отчет количеств/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_QUANTITY);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 22 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Печать итогов регистрации / перерегистрации/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_REGISTRATIONS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 23 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Счетчики итогов ФН/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 24 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //отчет по товарам по СНО/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //сверка итогов/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки компонент Сбербанка.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.NFun(6000);/##CHR(13)##//##CHR(10)##/ IF ( Результат <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //получаем слип-чек и добавляем в чек/##CHR(13)##//##CHR(10)##/ СлипЧек = DriverPayCard.GParamString("Cheque"); /##CHR(13)##//##CHR(10)##/ РазделительСтрок = CHR(10);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа = 1;/##CHR(13)##//##CHR(10)##/ СлипЧекВрем = РазделительСтрок + СлипЧек;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( СтрокаСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, СтрокаСлипа, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа++;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка печати сверки итогов на ФР", "Ошибка сверки итогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипОтчета == 100 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = true;/##CHR(13)##//##CHR(10)##/ //проверим что номер чека передан, т.е. выбрали конкретный чек из списка или номер у выбранного чека не равен 0/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( VAL(НОМЕРЧЕКА) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не выбран кассовый чек для печати копии", "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ ПечатаемКопию = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ПечатаемКопию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //копия чека по номеру ФД/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, НОМЕРЧЕКА);/##CHR(13)##//##CHR(10)##/ fptr.report();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Отчет №" + ТипОтчета + ": Данный отчет не поддерживается профилем оборудования" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(fiscalParams) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ФискальныеПараметры", fiscalParams);/##CHR(13)##//##CHR(10)##/ ИтогЧека = ФискальныеПараметры.total;/##CHR(13)##//##CHR(10)##/ НомерФД = ФискальныеПараметры.fiscalDocumentNumber;/##CHR(13)##//##CHR(10)##/ ПодписьФД = ФискальныеПараметры.fiscalDocumentSign;/##CHR(13)##//##CHR(10)##/ ДатаВремяФД = ФискальныеПараметры.fiscalDocumentDateTime;/##CHR(13)##//##CHR(10)##/ НомерЧекаВСмене = ФискальныеПараметры.fiscalReceiptNumber;/##CHR(13)##//##CHR(10)##/ НомерСмены = ФискальныеПараметры.shiftNumber;/##CHR(13)##//##CHR(10)##/ НомерФН = ФискальныеПараметры.fnNumber;/##CHR(13)##//##CHR(10)##/ РегНомер = ФискальныеПараметры.registrationNumber;/##CHR(13)##//##CHR(10)##/ АдремФНС = ФискальныеПараметры.fnsUrl;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ФискальныеПараметры");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Кассовый чек не допечатался на ККМ" + CHR(13) + "Допечатать чек?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека", 4);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==6) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаДопечатать = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""continuePrint""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаДопечатать);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.echeque )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": " + ЕСЛИ( КомандыЧека.echeque, "true", "false" ) + "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //КЛИЕНТ/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "{/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( КомандыЧека.price, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КомандыЧека.quantity + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( КомандыЧека.discountvalue, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + КомандыЧека.rvariant + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Маркировка/##CHR(13)##//##CHR(10)##/ //Значение маркировки может быть передано как строкой, так и объектом./##CHR(13)##//##CHR(10)##/ //Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162./##CHR(13)##//##CHR(10)##/ //В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу./##CHR(13)##//##CHR(10)##/ //Описание объектов представлено ниже. При передаче значения марки как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162./##CHR(13)##//##CHR(10)##/ //Параметры:/##CHR(13)##//##CHR(10)##/ //gtin (строка) - Идентификатор продукта GTIN/##CHR(13)##//##CHR(10)##/ //serial (строка) - furs - Серийный номер / medicines - Контрольный (идентификационный) знак (КиЗ) / tobacco - Код идентификации / shoes - Серийный номер/##CHR(13)##//##CHR(10)##/ //type (строка) - тип маркировки/##CHR(13)##//##CHR(10)##/ // furs - меховые изделия /##CHR(13)##//##CHR(10)##/ // medicines - лекарства /##CHR(13)##//##CHR(10)##/ // tobacco - табачная продукция /##CHR(13)##//##CHR(10)##/ // shoes - обувь/##CHR(13)##//##CHR(10)##/ //Пример для мех. изделий:/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": ""98765432101234"",/##CHR(13)##//##CHR(10)##/ ""serial:"": ""RU-430302-ABC1234567""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ //Произвольная маркировка/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = """nomenclatureCode"": ""MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=""";/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //ТекстПозицииЧека = ТекстПозицииЧека + "," + ТекстМаркировка;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ //ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##/PUBLIC ТипЧека, КОНТРАГЕНТ;/##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "composite"; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/КОНТРАГЕНТ = ЗАПРОС( "SELECT client FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ),/##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject varchar( 20 ), rvariant varchar( 20 ), kodn varchar( 20 ), department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic AND a.code = cl.cr_code/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки (из доп. кода)/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ", /##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", "1", "4" ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СРПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПРПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПРПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)]; /##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)]; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПредметРасчета)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СпособРасчета)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(linenum), 10))",/##CHR(13)##//##CHR(10)##/ "row_number() OVER (ORDER BY RIGHT(SPACE(10) + rtrim(npp), 10))") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT TOP 1 sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code AND specn.date <= GETDATE()/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn/##CHR(13)##//##CHR(10)##/ ORDER BY specn.date DESC)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаАйтида;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'', ''" + КодНалога + "'', 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", "1", "4" ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + ", ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПРПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СРПозиции = 3; //аванс/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[VAL(ПРПозиции)];/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[VAL(СРПозиции)];/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчетаПозиции + "'', ''" + СпособРасчетаПозиции + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',133.00000000,'//Список разрешенных отчетов./##CHR(13)##//##CHR(10)##/RETURN "Копия последнего чека|41;Отчет о состоянии расчетов|42;Отчет по секциям|7;Отчет по кассирам|8;Отчет по товарам по суммам|9;Отчет по часам|10;Отчет количеств|11;/##CHR(13)##//##CHR(10)##/Печать итогов регистрации / перерегистрации|22;Счетчики итогов ФН|23;Отчет по товарам по СНО|24;Сверка итогов платежной системы|50";',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'// Инициализация ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры:/##CHR(13)##//##CHR(10)##/// КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##/// НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьКодНалогаВККМ" - функция, которая получает значение кода налога в ККМ по коду налога из справочника списка налогов в Айтиде/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //04 - НДС 18/20% vat20 - НДС 20%/##CHR(13)##//##CHR(10)##/ //05 - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьКодНалогаВККМ. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', "vat10", ЕСЛИ( КодНалогаАйтида == ''04'', "vat20", ЕСЛИ( КодНалогаАйтида == ''06'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПолучитьНалогККМПоТипуНалога" - функция, которая получает значение кода налога в ККМ по типу налога из карточки налога справочника кодов налогов в Айтиде (из поля "Рассчитывать")/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// КодНалогаАйтида - код налога из справочники Кодов Налогов/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьНалогККМПоТипуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT proc_, ntype FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''","ДанныеПоНалогу", 1);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ ТипНалога = ДанныеПоНалогу.ntype;/##CHR(13)##//##CHR(10)##/ ПроцентНалога = ДанныеПоНалогу.proc_;/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Тип налога в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //06 - НДС 20% vat20 - НДС 20% /##CHR(13)##//##CHR(10)##/ //05 - НДС 10% vat10 - НДС 10%/##CHR(13)##//##CHR(10)##/ //07 - НДС 0% vat0 - НДС 0%/##CHR(13)##//##CHR(10)##/ //"" - Без НДС none - налогом не облагается/##CHR(13)##//##CHR(10)##/ // vat18 - НДС 18%/##CHR(13)##//##CHR(10)##/ // vat110 - НДС 10/110/##CHR(13)##//##CHR(10)##/ // vat118 - НДС 18/118/##CHR(13)##//##CHR(10)##/ // vat120 - НДС 20/120/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ПолучитьНалогККМПоКодуНалога. КодНалогаАйтида = " + КодНалогаАйтида);/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( ТипНалога == ''06'', "vat20", ЕСЛИ( ТипНалога == ''05'', "vat10", ЕСЛИ( ТипНалога == ''07'', "vat0", "none" ) ) );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеПоНалогу");/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТипЧекаККМ = ЕСЛИ( ТипЧека == 1, "2", ЕСЛИ( ТипЧека == 4, ЕСЛИ( ЧЕККОРРЕКЦИИ, "9", "4" ), ЕСЛИ( ТипЧека == 5, "5", ЕСЛИ( ЧЕККОРРЕКЦИИ, "7", "1" ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТипЧекаАйтида ) == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellCorrection", "sell");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "sellReturnCorrection", "sellReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyCorrection", "buy");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = ЕСЛИ( ЭтоЧекКоррекции, "buyReturnCorrection", "buyReturn");/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипЧекаАйтида ) == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 0; //в ККМ такого номера нет, будем использовать как признак нефискального чека/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = "sell"; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПолучитьЗначениеСНО( КодСНО )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СНО = "";/##CHR(13)##//##CHR(10)##/ IF ( КодСНО == 1 )/##CHR(13)##//##CHR(10)##/ СНО = "osn";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 2 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncome";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 4 )/##CHR(13)##//##CHR(10)##/ СНО = "usnIncomeOutcome"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 8 )/##CHR(13)##//##CHR(10)##/ СНО = "envd";/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 16 )/##CHR(13)##//##CHR(10)##/ СНО = "esn"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСНО == 32 )/##CHR(13)##//##CHR(10)##/ СНО = "patent";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN СНО; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"АТОЛ_ПечатьКассовогоЧекаНаФР" - функция, которая будет пробивать сформированный в формате JSON кассовый чек на ФР/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ТекстКассовогоЧека - текст кассового чека в формате JSON/##CHR(13)##//##CHR(10)##/// ФискальныйЧек - признак фискального чека (true - фискальный, false - нефискальный)/##CHR(13)##//##CHR(10)##/// Для нефискального чека не возвращается ответ с параметрами/##CHR(13)##//##CHR(10)##/// Функция возвращает значения: /##CHR(13)##//##CHR(10)##/// true - если кассовый чек успешно пробился в ККМ/##CHR(13)##//##CHR(10)##/// false - если в процессе возникла ошибка пробития чека/##CHR(13)##//##CHR(10)##/// /##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстКассовогоЧека, ФискальныйЧек, КОДУСТРОЙСТВАПЕЧАТИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сбрасываем последнюю ошибку, если она есть/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстКассовогоЧека);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обработаем результат печати чека/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("РезультатЗадания", РезультатПечатиЧека);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ fiscalParams = "";/##CHR(13)##//##CHR(10)##/ warnings = "";/##CHR(13)##//##CHR(10)##/ IF ( ЧИТАТЬЗАПИСЬ("РезультатЗадания") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(warnings) AND warnings <> "null" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ОшибкиЗакрытияЧека", warnings);/##CHR(13)##//##CHR(10)##/ notPrinted = false;/##CHR(13)##//##CHR(10)##/ ЧИТАТЬЗАПИСЬ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ ЧекНЕДопечатался = notPrinted == "true" OR notPrinted == true;/##CHR(13)##//##CHR(10)##/ IF ( ЧекНЕДопечатался )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка закрытия документа в ККМ и попытка его допечатать/##CHR(13)##//##CHR(10)##/ While (fptr.checkDocumentClosed() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос/##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось пробить кассовый чек (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и нажмите ""ОК"" ");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ if ( !fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно/##CHR(13)##//##CHR(10)##/ While (fptr.continuePrint() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз./##CHR(13)##//##CHR(10)##/ MESSAGEBOX("Не удалось напечатать документ (Ошибка: " + fptr.errorDescription() + ")." + CHR(13) + "Устраните неполадку и повторите.");/##CHR(13)##//##CHR(10)##/ Continue;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ОшибкиЗакрытияЧека");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось прочитать ответные данные от ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("РезультатЗадания");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //конец обработки результата печати чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати кассового чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, ФискальныйЧек, _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ, ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/PUBLIC _ККТСУММАБЕЗНАЛ, ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС, НомерЧекаККМ, НомерСменыККМ, _ОТДЕЛЬНЫЙСЛИПЕГАИС, _ВАРИАНТВЫВОДАШКЕГАИС, _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, _ШИРИНАШКЕГАИС, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ;/##CHR(13)##//##CHR(10)##/PUBLIC _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ, _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ, _РАБОТАСЕГАИС, _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ, НомерЛУПлатежнойСистемы, TerminalNumber, ЕстьНеявныеОшибкиПС, БанковскиеПозицииЧека, ИДТЕРМИНАЛАИЗПРОФИЛЯ, _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ, _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[0] = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию НЕ будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬНАЛОГИ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = true; //признак необходимости печати слипов ЕГАИС, true - печатать, false - не печатать (для исключительных ситуаций)/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = "cash";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= "electronically";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = "prepaid";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = "credit";/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = "other";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/_КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ= 14; //количество дней возраста буфера чеков в ФН, который считается критичным и требует внимания пользователя (будет выведено сообщение)/##CHR(13)##//##CHR(10)##///СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - НАЧАЛО/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///!!!ПОСЛЕ ИЗМЕНЕНИЯ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ ТРЕБУЕТСЯ ПЕРЕЗАПУСТИТЬ АЙТИДУ ДЛЯ ВСТУПЛЕНИЯ ИЗМЕНЕНИЙ В СИЛУ/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///переменные для оптимизации используемого пространства на чековой ленте при печати слипов ЕГАИС и для экономии чековой ленты/##CHR(13)##//##CHR(10)##///возможен вариант совмещенной печати слипа ЕГАИС вместе с кассовым чеком/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОТДЕЛЬНЫЙСЛИПЕГАИС = false; // признак необходимости печати слипа ЕГАИС отдельно от кассового чека. /##CHR(13)##//##CHR(10)##/ //Значения: true - Слип ЕГАИС печатается как отдельный нефискальный чек/##CHR(13)##//##CHR(10)##/ // false - Слип ЕГАИС печатается вместе с кассовым чеком/##CHR(13)##//##CHR(10)##/ ///##CHR(13)##//##CHR(10)##/_ВАРИАНТВЫВОДАШКЕГАИС = 2; //Вариант вывода QR-кода ЕГАИС на чеке. /##CHR(13)##//##CHR(10)##/ //Значения:/##CHR(13)##//##CHR(10)##/ // Вариант 1 - стандартно - (QR по центру, ссылка и цифровая подпись под ним снизу)/##CHR(13)##//##CHR(10)##/ // Вариант 2 - с оверлеем (ссылка слева, QR - справа, цифровая подпись - снизу) /##CHR(13)##//##CHR(10)##/ //!!!ВНИМАНИЕ. При использовании варианта = 2, чтобы QR не перекрывал ссылку, требуется тонкая подстройка значений следующих параметров:/##CHR(13)##//##CHR(10)##/ // _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС, _ШИРИНАШКЕГАИС, _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ, /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС = 4; //Коэффициент увеличения QR ЕГАИС. По умолчанию равно 4. Для данного значения коэффициента ширина QR Егаис составляет 13 символов./##CHR(13)##//##CHR(10)##/ //При изменении значения коэффициента и использования _ВАРИАНТВЫВОДАШКЕГАИС равного 2 требуется ручная подгонка параметров, указанных в описании параметра _ВАРИАНТВЫВОДАШКЕГАИС. /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = 32; //Количество символов в строке, помещающееся на чековой ленте. Как правило для 57 ленты равно 32-36 символов, для 80й ленты - 48-64 символов (в зависимости от модели ККМ и используемого шрифта)./##CHR(13)##//##CHR(10)##/ //Данный параметр используется для вывода ШК ЕГАИС с оверлеем (_ВАРИАНТВЫВОДАШКЕГАИС = 2: ШК справа, ссылка слева), а так же для банковских слипов/##CHR(13)##//##CHR(10)##/ //ВАЖНО!!! - Данный параметр будет автоматически подстраиваться под используемую модель ККТ посредством выполнения обработки "ШиринаЛенты" данного профиля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШИРИНАШКЕГАИС = 13; //Количество символов строки, занимаемое QR-кодом ЕГАИС. Данный параметр расчитан экспериментальным путем для коэффициента увеличения QR ЕГАИС равным 4./##CHR(13)##//##CHR(10)##/ //Требует корректировки только при _ВАРИАНТВЫВОДАШКЕГАИС = 2 и изменении _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС на значение не равное стандартному (4)./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ = 1; //Номер Шрифта ККМ для печати нефискальных (текстовых) строк. По умолчанию имеет значение равное 0, что соответствует шрифту, настроенному в параметрах ККМ./##CHR(13)##//##CHR(10)##/ //ВНИМАНИЕ!!! Изменение номера шрифта для нефискальной печати влияет на любую нефискальную печать профилем (слип ЕГАИС, банковские слипы, нефискальные строки в чеке)/##CHR(13)##//##CHR(10)##/ //При изменении номера шрифта на значение отличное от значения по умолчанию 0, требутеся корректировка значения переменной _ШИРИНАШКЕГАИС, если _ВАРИАНТВЫВОДАШКЕГАИС равен 2 /##CHR(13)##//##CHR(10)##///Прочие переменные/##CHR(13)##//##CHR(10)##/_КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ = true; //Переменная отвечает за необходимость контроля при открытии смены расхождения даты и времени в ККМ с датой и временем в ПК. /##CHR(13)##//##CHR(10)##/ //Если расхождение больше чем на _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ минут, то будет выведен запрос пользователю о синхронизации даты и времени/##CHR(13)##//##CHR(10)##/ // Значения: true - контроль даты и времени включен, false - контроль выключен/##CHR(13)##//##CHR(10)##/_ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ = 3; //Допустимое количество минут расхождения даты и времени. Значение по умолчания равно 3 минутам. /##CHR(13)##//##CHR(10)##/ //Разница времени с ККМ меньшая указанного количества минут считается нормальной и изменение даты/времени не осуществляется/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE ("_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ = false; //Необходимость вывода информации о начисленных и списанных бонусных баллах на чеке, а так же остаток бонусов. true - выводить, false - не выводить/##CHR(13)##//##CHR(10)##/ //Работает на версии 4.0.6 и выше, при использовании стандартной бонусной системы/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПЕРЕМЕННЫЕ ДЛЯ ПЛАТЕЖНОЙ СИСТЕМЫ - НАЧАЛО/##CHR(13)##//##CHR(10)##/НомерЛУПлатежнойСистемы = 1; //номер логического устройства в драйвере ПС Атол/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 2; //число копий банковских слипов (по умолчанию 2)/##CHR(13)##//##CHR(10)##/_БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ = true; //признак необходимости печати банковского слипа вместе с кассовым чеком. /##CHR(13)##//##CHR(10)##/ // Значения: true - слип печатается вместе с кассовым чеком, false - слип печатается отдельным нефискальным чеком/##CHR(13)##//##CHR(10)##/ //Если _КОЛИЧЕСТВОКОПИЙСЛИПА больше чем 1, то вместе с чеком печатается только один слип, остальные печатаются как нефискальные/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ = 128;/##CHR(13)##//##CHR(10)##///признак необходимости использования механизма неподтвержденных/подтвержденных транзакций. /##CHR(13)##//##CHR(10)##/// true - включено, транзакции будут устанавливаться в неподтвержденной состояние и подтверждаться при успешном пробитии чека или отменяться при неуспешном/##CHR(13)##//##CHR(10)##/// false - выключено, транзакции не будут устанавливаться в состояние неподтвержденного и подтверждаться при успешном пробитии чека или отменяться при неуспешном./##CHR(13)##//##CHR(10)##///Подробнее о механизме можно прочитать в инструкции http://itida.ru/download/docs/itida_54fz.pdf (раздел 6)/##CHR(13)##//##CHR(10)##/IF ( TYPE("_ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ПЕРЕМЕННЫЕ ДЛЯ ПЛАТЕЖНОЙ СИСТЕМЫ - КОНЕЦ',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОткрытиеЯщика = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""openCashDrawer""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОткрытиеЯщика);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка открытия денежного ящика. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'// Получение статуса/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// КодСтатуса строка, определяющая статус, значение которого необходимо вернуть./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ НомерСменыККМ = VAL(ДанныеСтатусСмены.number) + ЕСЛИ( СтатусСмены == "closed", 1, 0 );/##CHR(13)##//##CHR(10)##/ Статус = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при получении номера смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN Статус;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусСмены = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getShiftStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусСмены);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусСмены = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусСменыККТ",ОтветСтатусСмены);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусСмены",СтатусСменыККТ.shiftStatus);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = ДанныеСтатусСмены.state;/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == "expired" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ККМ """ + ИмяОборудования + """: Смена превысила 24 часа." + CHR(13) + "Необходимо произвести закрытие смены.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Статус = СтатусСмены <> "closed";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусСмены");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусСменыККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении статуса смены ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка получения статуса ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Статус;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr.Close();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/fptr = false;/##CHR(13)##//##CHR(10)##/_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоОбменаОФД = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""ofdExchangeStatus""/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ВозврастБуфераДней; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоОбменаОФД = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоОбменаОФД",ОтветИнфоОбменаОФД);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеОбменаОФД",ИнфоОбменаОФД.status);/##CHR(13)##//##CHR(10)##/ КоличествоНеотправленных = ДанныеОбменаОФД.notSentCount;/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(ДанныеОбменаОФД.notSentFirstDocDateTime,0) ;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоНеотправленных > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE();/##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day''));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( ABS( ВозврастБуфераДней ) >= _КРИТИЧНЫЙВОЗРАСТБУФЕРАЧЕКОВ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // СООБЩЕНИЕ("Чеки не отправляются в ОФД в течение " + ABS( ВозврастБуфераДней ) + " дней.", "ВНИМАНИЕ!!!");/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеОбменаОФД");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоОбменаОФД");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'// Внесение наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма вносимых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВнесение = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashIn"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВнесение);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВнесение = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Внесение",ОтветВнесение);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВнесение",Внесение.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВнесение.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВнесение");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Внесение");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка внесения денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Сумма нал = " + СуммаНал);/##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (SPLITPSYSTEM == true)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки компонент Сбербанка.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprequipment'') AND (COLUMN_NAME = N''psnumber'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬНОМЕРЛУПЛАТЕЖНОЙСИСТЕМЫ == 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЛУПлатежнойСистемы = VAL( ЗАПРОС("SELECT psnumber FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Department", НомерЛУПлатежнойСистемы);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ТипЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.NFun(6004);/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //отмена транзакции/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.NFun(4003);/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ReferenceNumber = DriverPayCard.GParamString("RRN");/##CHR(13)##//##CHR(10)##/ //DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ //DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ //ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыБезналичные + "'', " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАСЕРТИФИКАТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПредоплата + "'', " + STR( СУММАСЕРТИФИКАТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СУММАКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыКредит + "'', " + STR( СУММАКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ЭТОРМК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыПрочее + "'', " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', ''" + ККТ_КодВидаОплатыНаличные + "'', " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', " + STR( 0, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Сумма регистрации = " + STR( СУММАРЕГИСТРАЦИИ, 16, 2 ) + ". Сумма по чеку = " + STR( СУММАЧЕКА, 16, 2 ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проводим форматно-логический контроль, чтобы при наличии позиций с невыполняющися равенством Количество*Цена = СуммаПозиции произвести разделение на две позиции так, чтобы это равенство выполнилось/##CHR(13)##//##CHR(10)##/РезультатФЛК = ПроизвестиФорматноЛогическийКонтроль();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПечатиЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/Результат = РезультатПечатиЧека == true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// отмена или подтверждение авторизации платежной системы/##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 AND !ПЕРЕМЕННАЯ("Доставка", false) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O" )/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ IF ( Результат == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //подтверждаем транзакцию/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6001);/##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ЗАФИКСИРОВАТЬ БАНКОВСКУЮ ТРАНЗАКЦИЮ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Производится отмена транзакции через платежную систему" );/##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6004); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ПРОИЗВЕСТИ АВАРИЙНУЮ ОТМЕНУ БАНКОВСКОЙ ТРАНЗАКЦИИ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ,2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ //отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4003); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + "НЕ УДАЛОСЬ ОТМЕНИТЬ БАНКОВСКУЮ ТРАНЗАКЦИЮ");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ IF ( SPLITPSYSTEM <> true )/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧекаККМ = 0;/##CHR(13)##//##CHR(10)##/НомерСменыККМ = 0;/##CHR(13)##//##CHR(10)##/RETURN Результат;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// Ширина ленты/##CHR(13)##//##CHR(10)##/// Ширина стандартная - 27 символов/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ККТ_ШИРИНА_ЛЕНТЫ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ RETURN _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = 27;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ККТ_ШИРИНА_ЛЕНТЫ = VAL(ДанныеИнфоККТ.receiptLineLength);/##CHR(13)##//##CHR(10)##/ //ШиринаЛентыПикселей = VAL(ДанныеИнфоККТ.receiptLineLengthPix);/##CHR(13)##//##CHR(10)##/ _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ = _ККТ_ШИРИНА_ЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при определении ширины ленты ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ККТ_ШИРИНА_ЛЕНТЫ;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'// Текст ошибки драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'// Последняя ошибка драйвера ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'// Наименование модели ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "ФР АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'// Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАОТКРЫТИЯДРАЙВЕРА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/IF (ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Перед настройкой драйвера оборудования необходимо записать карточку торгового оборудования");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Показать свойства/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера." + CHR(13) + "Возможно не установлен драйвер ККТ АТОЛ версии 10 (32х разрядный).","Ошибка загрузки драйвера");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT TOP 1 value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( fptr.ShowProperties(fptr.LIBFPTR_GUI_PARENT_NATIVE, 0) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = fptr.getSettings();/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") );/##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + НастройкиККТ + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАОТКРЫТИЯДРАЙВЕРА = true;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОШИБКАОТКРЫТИЯДРАЙВЕРА == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не удалось открыть окно настроек драйвера");/##CHR(13)##//##CHR(10)##/ ///*/##CHR(13)##//##CHR(10)##/ ВОПРОС = "Инициализировать сохраненные настройки связи значениями поумолчанию?";/##CHR(13)##//##CHR(10)##/ IF (СООБЩЕНИЕ(Вопрос,"Настройка связи с ККТ", 4) == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //удалим параметр с настройками ККТ/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Сохраненные настройки ККТ удалены. Попытайтесь открыть диалоговое окно драйвера еще раз.");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //*//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'ВерсияПрофиля = "v.5.15"; /##CHR(13)##//##CHR(10)##/// Имя устройства ФР/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceName = "ККМ АТОЛ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN "(" + ВерсияБиблиотеки + ") ДРАЙВЕР ККТ АТОЛ v.10 НЕ УСТАНОВЛЕН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаИнфоККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceInfo""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаИнфоККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветИнфоККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ИнфоККТ",ОтветИнфоККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеИнфоККТ",ИнфоККТ.deviceInfo);/##CHR(13)##//##CHR(10)##/ modelName = ДанныеИнфоККТ.modelName;/##CHR(13)##//##CHR(10)##/ serial = ДанныеИнфоККТ.serial;/##CHR(13)##//##CHR(10)##/ firmwareVersion = ДанныеИнфоККТ.firmwareVersion;/##CHR(13)##//##CHR(10)##/ configurationVersion = ДанныеИнфоККТ.configurationVersion;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( configurationVersion ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //перезапишем параметр с версией платформы в БД/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''"); //удаляем параметр, чтобы не дублировался при записи/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ЕстьПараметр = !ПУСТО( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ); /##CHR(13)##//##CHR(10)##/ //IF (ЕстьПараметр)/##CHR(13)##//##CHR(10)##/ // ЗАПРОС("UPDATE param_ex SET value = ''" + НастройкиККТ + "'' WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ //ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO param_ex (param, value) VALUES (''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "'', ''" + ЕСЛИ(LEFT(configurationVersion, 1) == "5", 1, 0) + "'')");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA ); /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ fiscal = ДанныеСтатусККТ.fiscal;/##CHR(13)##//##CHR(10)##/ shift = ДанныеСтатусККТ.shift;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( shift == "opened" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена открыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "closed" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена закрыта";/##CHR(13)##//##CHR(10)##/ ELSE IF ( shift == "expired" )/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "Смена > 24ч";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СтрокаСтатусСмены = "";/##CHR(13)##//##CHR(10)##/ //deviceName = modelName + ", №" + serial + ", v." + firmwareVersion + ", " + ЕСЛИ(fiscal == true, "ФИСК", "НЕФИСК") + ", Версия прошивки ККТ: " + configurationVersion + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияПрофиля + ") " + modelName + ", №" + serial + ", v." + configurationVersion + ", " + ЕСЛИ(fiscal == "true" OR fiscal == true, "ФИСК", "НЕФИСК") + " " + СтрокаСтатусСмены;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеСтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеИнфоККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ИнфоККТ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STATUS);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ deviceName = fptr.getParamString(fptr.LIBFPTR_PARAM_MODEL_NAME) + ", №" + fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER) + /##CHR(13)##//##CHR(10)##/ ", v." + fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION) + ", " + ЕСЛИ(fptr.getParamBool(fptr.LIBFPTR_PARAM_FISCAL) == true, "ФИСК", "НЕФИСК");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ deviceName = "(" + ВерсияБиблиотеки + ") Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN deviceName;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'// Количество зарегестрированных устройств в драйвере ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/deviceCount = 1;/##CHR(13)##//##CHR(10)##/RETURN deviceCount;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'// Выплата наличных/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Сумма число вещественное, сумма выплачиваемых наличных денег./##CHR(13)##//##CHR(10)##/// FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КОДОБОРУДОВАНИЯ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаВыплата = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""cashOut"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },/##CHR(13)##//##CHR(10)##/ ""cashSum"": " + СТРОКА(Сумма, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаВыплата);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОтветВыплата = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("Выплата",ОтветВыплата);/##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ //ЗАГРУЗИТЬJSON("РезультатВыплата",Выплата.counters);/##CHR(13)##//##CHR(10)##/ //СуммаВЯщике = РезультатВыплата.cashSum;/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("РезультатВыплата");/##CHR(13)##//##CHR(10)##/ //УДАЛИТЬКОНТЕКСТ("Выплата");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ)] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выплаты денежной суммы. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'//СЛУЖЕБНЫЕ ФУНКЦИИ - НАЧАЛО/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"<", "<" ); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,">",">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,",", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,";",".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(10),""); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(13)+CHR(10),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(187),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,CHR(171),"");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"/", "."); /##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"\", ".");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"""", "\""");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"[", "(");/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ,"]", ")");/##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Функция "ДобавитьСтрокуЧека" - добавляет фискальную или нефискальную строку к строкам чека/##CHR(13)##//##CHR(10)##///Параметры:/##CHR(13)##//##CHR(10)##/// ПозицииЧека (строка) - фискальные и/или нефискальные позиции чека/##CHR(13)##//##CHR(10)##/// ДобавляемаяСтрока (строка) - новая строка, добавляемая к чеку. Для нефискальной строки передается значение текста, отправляемого на печать/##CHR(13)##//##CHR(10)##/// ФискальнаяСтрока (Логическое) - признак фискальной строки (товароной позиции)/##CHR(13)##//##CHR(10)##/// ТипСтроки (строка) - определяет какой тип строки передан. Данной функцией обрабатывается самостоятельное формирование объекта только для нефискальной строки, остальные типы строк добавляются как есть./##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// position - фискальная строка/##CHR(13)##//##CHR(10)##/// text - текстовая строка/##CHR(13)##//##CHR(10)##/// barcode - штрихкод/##CHR(13)##//##CHR(10)##/// и т.д. согласно описанию типов позиций в JSON заданиях в документации integration.atol.ru/##CHR(13)##//##CHR(10)##/// Выравнивание (строка) - выравнивание для нефискальной строки /##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// left - по левому краю /##CHR(13)##//##CHR(10)##/// center - по центру /##CHR(13)##//##CHR(10)##/// right - по правому краю/##CHR(13)##//##CHR(10)##/// Перенос (строка) - перенос текста для нефискальных строк/##CHR(13)##//##CHR(10)##/// Значения:/##CHR(13)##//##CHR(10)##/// none - не переносить, обрезать по ширине ленты /##CHR(13)##//##CHR(10)##/// chars - посимвольный перенос /##CHR(13)##//##CHR(10)##/// words - перенос по словам /##CHR(13)##//##CHR(10)##/// Порядок переноса строк:/##CHR(13)##//##CHR(10)##/// Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)/##CHR(13)##//##CHR(10)##/// Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// ШрифтТекста (число) - номер шрифта из ККМ (Зависит от модели ККТ) по умолчанию - 0/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьСтрокуЧека(ПозицииЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки, Выравнивание, Перенос, ШрифтТекста)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ФискальнаяСтрока AND ТипСтроки == "text" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НоваяСтрока = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + XMLTRANS(ДобавляемаяСтрока) + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": """ + Выравнивание + """,/##CHR(13)##//##CHR(10)##/ ""wrap"": """ + Перенос + """,/##CHR(13)##//##CHR(10)##/ ""font"": " + VAL(ШрифтТекста) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + НоваяСтрока;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = ПозицииЧека + ЕСЛИ(!ПУСТО(ПозицииЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ПозицииЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///"ДобавитьОплатуЧека" - функция аналогичная функции "ДобавитьСтрокуЧека" для добавления оплат в чек/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьОплатуЧека(СтрокиОплатЧека, ДобавляемаяСтрока, ФискальнаяСтрока, ТипСтроки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = СтрокиОплатЧека + ЕСЛИ(!ПУСТО(СтрокиОплатЧека),",","") + ДобавляемаяСтрока; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Функция КАС_ПолучитьGTIN_SERIAL_ИзШтрихкодаМаркировки()/##CHR(13)##//##CHR(10)##///Описание: Получает gtin и серийный номер из штрихкода маркировки по типу маркировки и возвращает общую длинну кода маркировки без крпиптохвоста/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Параметры: /##CHR(13)##//##CHR(10)##/// ШтрихкодМаркировки - штрихкод марки, из которого извлекаем gtin и serial/##CHR(13)##//##CHR(10)##/// ТипМаркировки - строка, тип маркировки, по которому определяем какое количество символов serial брать из ШтрихкодаМаркировки/##CHR(13)##//##CHR(10)##/// gtin - экспортный параметр, заполняется полученным значением gtin/##CHR(13)##//##CHR(10)##/// serial - экспортный параметр, заполняется полученным значением serial/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПолучитьДлиннуШтрихкодаМаркировки(ШтрихкодМаркировки, ТипМаркировки, gtin, serial)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = 1; //определеяем начало символов расположения GTIN в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ //если встретили первыми двумя символами идентификатор 01, то смещаем начало чтения GTIN/##CHR(13)##//##CHR(10)##/ IF ( LEFT( ШтрихкодМаркировки, 2 ) == "01" ) /##CHR(13)##//##CHR(10)##/ НачалоСимволовGTIN = НачалоСимволовGTIN + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ GTIN/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШтрихкодМаркировки, НачалоСимволовGTIN, 14);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = LEN(gtin) + НачалоСимволовGTIN; // вычисляем начало символов расположения SERIAL в штрихкоде маркировки/##CHR(13)##//##CHR(10)##/ IF ( SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, 2) == "21" ) //если сразу после GTIN встретили идентификатор 21, то смещаем начало чтения серийного номера на 2 символа/##CHR(13)##//##CHR(10)##/ НачалоСимволовSERIAL = НачалоСимволовSERIAL + 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //наиболее распространенный вариант/##CHR(13)##//##CHR(10)##/ //далее по типу маркировки определим сколько символов необходимо брать для SERIAL/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //табак/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "1520" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //обувь/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0003" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //лекарства/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "0002" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //шубы/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9999" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //прочая/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9996" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 20; //фото/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9995" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //парфюм/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9997" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //шины/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9998" )/##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 13; //легпром/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипМаркировки == "9994" ) /##CHR(13)##//##CHR(10)##/ КоличествоСимволовSERIAL = 7; //АТП/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ОПРЕДЕЛИМ SERIAL/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШтрихкодМаркировки, НачалоСимволовSERIAL, КоличествоСимволовSERIAL);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлиннаКода = НачалоСимволовSERIAL + КоличествоСимволовSERIAL - 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для табака будем возвращать нулевую длинну, чтобы шк марки не изменился при передаче/##CHR(13)##//##CHR(10)##/ IF ( ТипМаркировки == "0005" )/##CHR(13)##//##CHR(10)##/ ДлиннаКода = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ДлиннаКода;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///функция проверяет выполнение равенства выражения "Количество*Цена = Сумма" для позиций чека и при необходимости разделяет позиции чека на две, если в одной позиции такого равенства невозможно добиться/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПроизвестиФорматноЛогическийКонтроль()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ККТ_ИСПОЛЬЗОВАТЬФЛК", true ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождениеФЛК = VAL( ПЕРЕМЕННАЯ( "_ККТ_ДОПУСТИМОЕРАСХОЖДЕНИЕФЛК", 0.01 ) ); // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //вычислим номер первой строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПервойСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column ASC");/##CHR(13)##//##CHR(10)##/ //вычислим номер последней строки с товарной позицией/##CHR(13)##//##CHR(10)##/ НомерПоследнейСтрокиТовара = ЗАПРОС("SELECT TOP 1 identity_column FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column DESC");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся до первой строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column < " + НомерПервойСтрокиТовара,"НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //отдельно обработаем позиции чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE operation = ''Регистрация'' OR operation = ''Возврат'' ORDER BY identity_column", "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПозицииЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоТовара = VAL( ПозицииЧека.quantity );/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( ПозицииЧека.summa );/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = VAL( ПозицииЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ Наименование = ПозицииЧека.name;/##CHR(13)##//##CHR(10)##/ _Цена_Учет = VAL( ПозицииЧека._price_u );/##CHR(13)##//##CHR(10)##/ СекцияККМ = ПозицииЧека.department;/##CHR(13)##//##CHR(10)##/ КодНалога = ПозицииЧека.kodn;/##CHR(13)##//##CHR(10)##/ ПредметРасчета = ПозицииЧека.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчета = ПозицииЧека.rvariant;/##CHR(13)##//##CHR(10)##/ ПарольОперации = ПозицииЧека.password;/##CHR(13)##//##CHR(10)##/ ИмяОперации = ПозицииЧека.operation;/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ПозицииЧека.marktype;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ПозицииЧека.markbc;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = VAL( ПозицииЧека.price ); /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ЭТОРМК )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = ROUND( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ + VAL( ПЕРЕМЕННАЯ( "_ВСЕГООПЛАТАБОНУСАМИ", 0) ) - СУММАОПЛАТЫ, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ <> 0 AND ОстатокОтСуммыРасчетной <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( СуммаТовара - ОстатокОтСуммыРасчетной, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции + ОстатокОтСуммыРасчетной;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ ОстатокОтСуммыРасчетной = 0.000;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //} /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = 0;/##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СуммаТовара / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = ROUND( КоличествоТовара * РасчетнаяЦена, 2 );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СуммаТовара;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ //IF ( РазницаСумм =< -1*ДопустимоеРасхождениеФЛК OR РазницаСумм >= ДопустимоеРасхождениеФЛК)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ABS( РазницаСумм ), 2 ) >= ROUND( ДопустимоеРасхождениеФЛК, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = ROUND( КоличествоТовара, 3 );/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ //ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = ROUND( РазницаСумм / 0.01, 3 );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - ROUND( РазницаСумм / КоличествоПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчитаем новую сумму с округлением до 2х знаков, /##CHR(13)##//##CHR(10)##/ //все что меньше или равно 0.005 округляем в меньшую сторону, а 0.006- 0.009 - в большую/##CHR(13)##//##CHR(10)##/ //чтобы достичь округления в меньшую сторону, вычтем 0.0001. /##CHR(13)##//##CHR(10)##/ //Так, например, число 10.245 приведем к 10.2449, что с округлением до двух знаков получится равным 10.24/##CHR(13)##//##CHR(10)##/ СуммаНовая = ROUND( КоличествоНовое * РасчетнаяЦена - 0.0001, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение. /##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки > КоличествоНовое )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ROUND(ТекущаяСкидка * КоличествоПереоценки / КоличествоТовара, 2 );/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СуммаСкидокРасчетная = ROUND(ТекущаяСкидка * КоличествоНовое / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = ТекущаяСкидка - СуммаСкидокРасчетная;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ //СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //получить часть штрихкодов маркировки, если позиция маркированная и с несколькими марками/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ШтрихКодМаркировки) AND VAL(ТипМаркировки) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки = 1;/##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиВрем = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ WHILE (КоличествоШКМаркировки <= КоличествоНовое)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировкиВрем, РазделительМарок, КоличествоШКМаркировки );/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый += ЕСЛИ( !ПУСТО(ШтрихКодМаркировкиНовый), "|", "") + Марка;/##CHR(13)##//##CHR(10)##/ КоличествоШКМаркировки++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = AT( ШтрихКодМаркировки, "|", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ IF ( ПозицияРазделителяСлева == 0 )/##CHR(13)##//##CHR(10)##/ ПозицияРазделителяСлева = LEN( ШтрихКодМаркировки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировки, ПозицияРазделителяСлева );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиНовый = LEFT( ШтрихКодМаркировкиНовый, LEN( ШтрихКодМаркировкиНовый ) - 1 );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоНовое );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", РасчетнаяЦена );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидокНовая );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиНовый);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Добавлена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоНовое, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( РасчетнаяЦена, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидокНовая, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиНовый); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ROUND( КоличествоПереоценки * ЦенаПереоценки, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ // СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировки, LEN( ШтрихКодМаркировки ) - LEN( ШтрихКодМаркировкиНовый ) );/##CHR(13)##//##CHR(10)##/ IF ( ЛЕВСИМВ( ШтрихКодМаркировкиОстаток, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = RIGHT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 );/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( ШтрихКодМаркировкиНовый, 1 ) == "|" )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировкиОстаток = LEFT( ШтрихКодМаркировкиОстаток, LEN( ШтрихКодМаркировкиОстаток ) - 1 ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем строку /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬСТРОКИ(1, "НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "operation", ИмяОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "password", ПарольОперации);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "mode", "1");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "checktype", "0");/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "name", Наименование);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "quantity", КоличествоТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "price", ЦенаТоварнойПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "_price_u", _Цена_Учет );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "summa", СуммаТовара );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "destination", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "department", ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ));/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discounttype", 0);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "discountvalue", СуммаСкидкиПозиции );/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "kodn", КодНалога);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rsubject", ПредметРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "rvariant", СпособРасчета);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "marktype", ТипМаркировки);/##CHR(13)##//##CHR(10)##/ ИЗМЕНИТЬПОЛЕ("НовыеКомандыЧека", "markbc", ШтрихКодМаркировкиОстаток);/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Изменена позиция: " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Наименование = " + Наименование + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Количество = " + STR( КоличествоТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Цена = " + STR( ЦенаТоварнойПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма = " + STR( СуммаТовара, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Скидка = " + STR( СуммаСкидкиПозиции, 15, 3 ) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипМаркировки = " + ТипМаркировки + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ШтрихКодМаркировки = " + ШтрихКодМаркировкиОстаток); /##CHR(13)##//##CHR(10)##/ //конец отладки/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обнуление переменных/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаТовара = 0.000;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ _Цена_Учет = 0.000; /##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = 0.000; /##CHR(13)##//##CHR(10)##/ //\ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПозицииЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПозицииЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //копируем все команды, располагающиеся после последней строки товаров в новую таблицу команд чека/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыСтрокЧека + " WHERE identity_column > " + НомерПоследнейСтрокиТовара,"ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //теперь удалим все строки из таблицы позиций/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DELETE FROM " + ИмяТаблицыСтрокЧека);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //и загрузим в неё данные из сформированных контекстов/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ(ИмяТаблицыСтрокЧека,"","identity_column","ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("НовыеКомандыЧека");/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ПоследниеКомандыЧека");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьКопииЧекаНаФР" - функция для печати копии чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьКопииЧекаНаФР(КОДУСТРОЙСТВАПЕЧАТИ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( КОДУСТРОЙСТВАПЕЧАТИ ) )/##CHR(13)##//##CHR(10)##/ КОДУСТРОЙСТВАПЕЧАТИ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КОДУСТРОЙСТВАПЕЧАТИ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ)];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM(КОДУСТРОЙСТВАПЕЧАТИ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка печати копии чека" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЗапросаОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""printLastReceiptCopy""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson(); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //проверим результат/##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка печати копии");/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДУСТРОЙСТВАПЕЧАТИ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати копии чека. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///"ПечатьЧекаНаФР" - функция, которая будет заниматься формирование чека в формате JSON для его последующей отправки в ККМ/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ СтрокиОплатЧека = "";/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true; //признак фискального чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧекаККМ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ЧЕКНАИМЕНОВАНИЕ, false, "text", "center", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ); /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА, false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ), false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫВОД QR КОДА НА ЧЕКЕ/##CHR(13)##//##CHR(10)##/ IF ( _ВАРИАНТВЫВОДАШКЕГАИС == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 1: вывода ШК по центру без оверлея и все подписи под ШК кодом по центру/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""center""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //ссылка ЕГАИС под QR кодом/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_url, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ВАРИАНТ 2: (ШК справа, ссылка слева и цифровая подпись снизу/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""barcode"",/##CHR(13)##//##CHR(10)##/ ""barcode"": """ + КомандыЧека.egais_url + """,/##CHR(13)##//##CHR(10)##/ ""barcodeType"": ""QR"",/##CHR(13)##//##CHR(10)##/ ""scale"": " + _КОЭФФИЦИЕНТУВЕЛИЧЕНИЯШКЕГАИС + ",/##CHR(13)##//##CHR(10)##/ ""alignment"": ""right"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Определим параметры печати с оверлеем./##CHR(13)##//##CHR(10)##/ //Чтобы ссылка егаис не скрывалась под QR кодом, разобъем её на подстроки и выведем эти подстроки слева от QR кода/##CHR(13)##//##CHR(10)##/ ТекстСсылкиЕГАИС = КомандыЧека.egais_url;/##CHR(13)##//##CHR(10)##/ ШиринаПечатиСсылки = _КОЛИЧЕСТВОСИМВОЛОВЧЕКОВОЙЛЕНТЫ - _ШИРИНАШКЕГАИС;/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = LEN(ТекстСсылкиЕГАИС);/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок = ЦЕЛОЕ( КоличествоСимволовВссылке/ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСимволовВссылке % ЕСЛИ(ШиринаПечатиСсылки==0,1,ШиринаПечатиСсылки) <> 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПодстрок++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Оверлей = "/##CHR(13)##//##CHR(10)##/ ""overlay"": [";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = 1;/##CHR(13)##//##CHR(10)##/ FOR ( index = 1; index <= КоличествоПодстрок ; index++ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСимволовВссылке = ЕСЛИ(КоличествоСимволовВссылке - ШиринаПечатиСсылки <= 0, КоличествоСимволовВссылке, КоличествоСимволовВссылке - ШиринаПечатиСсылки); /##CHR(13)##//##CHR(10)##/ ТекстПодстроки = SUBSTR( ТекстСсылкиЕГАИС, НачальнаяПозиция, ЕСЛИ( index == КоличествоПодстрок, КоличествоСимволовВссылке, ШиринаПечатиСсылки ) );/##CHR(13)##//##CHR(10)##/ НачальнаяПозиция = НачальнаяПозиция + ШиринаПечатиСсылки;/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + ЕСЛИ( ПРАВСИМВ( Оверлей, 1 ) == "}", ",", "" ) + "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""text"",/##CHR(13)##//##CHR(10)##/ ""text"": """ + ТекстПодстроки + """,/##CHR(13)##//##CHR(10)##/ ""alignment"": ""left"",/##CHR(13)##//##CHR(10)##/ ""wrap"": ""chars"",/##CHR(13)##//##CHR(10)##/ ""font"":" + VAL( _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ ) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрывающая оверлей квадратная скобка/##CHR(13)##//##CHR(10)##/ Оверлей = Оверлей + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ //соберем объект для печати QR кода со ссылкой/##CHR(13)##//##CHR(10)##/ НоваяСтрокаШК = НоваяСтрокаШК + Оверлей + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ //добавим полученный объект со штрихкодом к позициям чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, НоваяСтрокаШК, false, "barcode", "", "", "");/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ //далее цифровая подпись/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.egais_sign, false, "text", "center", "chars", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ //+ одна пустая строка/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, " ", false, "text", "left", "none", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ОТДЕЛЬНЫЙСЛИПЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, "" );/##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем начало текста чека/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.checktype == 0 OR КомандыЧека.checktype == "0" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = false;/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФискальныйЧек = true;/##CHR(13)##//##CHR(10)##/ СистемаНО = АТОЛ_ПолучитьЗначениеСНО( ЗАПРОС( "SELECT taxtype FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ _ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + _КАССИР);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.checktype + """,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !ПУСТО( СистемаНО ), """taxationType"": """ + СистемаНО + """,", "") + "/##CHR(13)##//##CHR(10)##/ ""ignoreNonFiscalPrintErrors"": false,/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ },";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "ЭЛЕКТРОННЫЙЧЕК", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЭлектронногоЧека = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""electronically"": true";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокЭлектронногоЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //покупатель/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = "";/##CHR(13)##//##CHR(10)##/ ИННКлиента = "";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КомандыЧека.clientcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT priz, name, inn FROM sprclient WHERE code = ''" + ALLTRIM(КомандыЧека.clientcode) + "''", "ДанныеКлиента", 1);/##CHR(13)##//##CHR(10)##/ ТипКлиента = VAL(ДанныеКлиента.priz);/##CHR(13)##//##CHR(10)##/ IF (ТипКлиента == 1 OR ТипКлиента == 3)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НаименованиеКлиента = XMLTRANS(ДанныеКлиента.name);/##CHR(13)##//##CHR(10)##/ ИННКлиента = ДанныеКлиента.inn;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("ДанныеКлиента");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ПОЧТА ) AND ПУСТО(КомандыЧека.clientcode) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЕСЛИ( ПРАВСИМВ(ЗаголовокЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""clientInfo"": {";/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ПОЧТА))/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ ""emailOrPhone"": """ + ПОЧТА + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НаименованиеКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ЕСЛИ(!ПУСТО(ПОЧТА),",","") + "/##CHR(13)##//##CHR(10)##/ ""name"": """ + НаименованиеКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИННКлиента))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + ",/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + ИННКлиента + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокИнфоКлиента = ЗаголовокИнфоКлиента + "/##CHR(13)##//##CHR(10)##/ },"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = ЗаголовокЧека + ЗаголовокИнфоКлиента;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.mode == 0)/##CHR(13)##//##CHR(10)##/ Перенос = "none";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.mode == 1)/##CHR(13)##//##CHR(10)##/ Перенос = "chars";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Перенос = "words";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КомандыЧека.checktype == "center")/##CHR(13)##//##CHR(10)##/ Выравнивание = "center";/##CHR(13)##//##CHR(10)##/ ELSE IF (КомандыЧека.checktype == "right")/##CHR(13)##//##CHR(10)##/ Выравнивание = "right";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Выравнивание = "left"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, КомандыЧека.name, false, "text", Выравнивание, Перенос, _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND (КомандыЧека.quantity*КомандыЧека.price - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ //СуммаПозиции = ROUND( КомандыЧека.summa - КомандыЧека.discountvalue, 2);/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( КомандыЧека.summa, 2);/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = КомандыЧека.price;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА") == "U")/##CHR(13)##//##CHR(10)##/ _ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == true AND ЦенаУчетная == 0)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF (_ФРНЕОТОБРАЖАТЬНАДБАВКИПРИНУЛЕВЫХЦЕНАХУЧЕТА == false AND ЦенаУчетная == 0) /##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ЦенаУчетная;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //константа. отвечающая за необходимость скрывать все наценки/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ФРСКРЫВАТЬВСЕНАЦЕНКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ФРСКРЫВАТЬВСЕНАЦЕНКИ = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ФРСКРЫВАТЬВСЕНАЦЕНКИ == true)/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //для ККТ на 5й платформе цена позиции должна указываться уже со скидками/##CHR(13)##//##CHR(10)##/ ЭтоПлатформа5 = VAL( ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTPLATFORM5" + ALLTRIM(КОДОБОРУДОВАНИЯ) + "''") ) == 1;/##CHR(13)##//##CHR(10)##/ IF (ЭтоПлатформа5)/##CHR(13)##//##CHR(10)##/ {*//##CHR(13)##//##CHR(10)##/ //09.03.2021 - изменение алгоритма пробития скидок на единый для всех платформ ККТ./##CHR(13)##//##CHR(10)##/ ЦенаПродажиПозиции = ROUND(СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара), 2);/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "partialPayment"; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = "credit"; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ PaymentMode = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ") == "U")/##CHR(13)##//##CHR(10)##/ _ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ = false; //признак необходимости выводить букву [М] для товарной позиции в чеке средствами профиля. По умолчанию отключено (значение false),/##CHR(13)##//##CHR(10)##/ //т.к. ожидается что буква [М] будет выводиться средствами прошивки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //***/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162") == "U")/##CHR(13)##//##CHR(10)##/ _ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 = false; //признак необходимости использовать старый формат тэга 1162 для чеков. По умолчанию равен false, т.е. используется новый формат/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/ КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = КомандыЧека.markbc;/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) <> 0 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец разбора списка марок/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/ IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ //Цена = СуммаПозиции/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ //ЦенаПродажиПозиции = Цена;/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = ЦенаПродажиПозиции;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( ЕСЛИ(_ВЫВОДИТЬПРИЗНАКМАРКИРОВКИВБУМАЖНОМЧЕКЕ == true AND !ПУСТО( КомандыЧека.markbc ), "(М) ","") + КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + Количество + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( Сумма, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ИСПОЛЬЗОВАТЬСТАРЫЙФОРМАТТЭГА1162 == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 7 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""tobacco"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""medicines"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 19, 13 );/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""shoes"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( ШКМарки, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( ШКМарки, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""nomenclatureCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""furs"",/##CHR(13)##//##CHR(10)##/ ""gtin"": """ + gtin + """,/##CHR(13)##//##CHR(10)##/ ""serial"": """ + serial + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE ("_ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ") == "U")/##CHR(13)##//##CHR(10)##/ _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ = false; //признак необходимости передавать весь код маркировки в составе реквизитов чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = ШКМарки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ККТПЕРЕДАВАТЬПОЛНЫЙКОДМАРКИРОВКИ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = 0;/##CHR(13)##//##CHR(10)##/ gtin = "";/##CHR(13)##//##CHR(10)##/ serial = "";/##CHR(13)##//##CHR(10)##/ ДлинаКодаМаркировки = ПолучитьДлиннуШтрихкодаМаркировки(ШКМарки, КомандыЧека.marktype, gtin, serial);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДлинаКодаМаркировки > 0 )/##CHR(13)##//##CHR(10)##/ ШтрихкодМаркировкиДляЧека = LEFT( ШКМарки, ДлинаКодаМаркировки );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ markingCode = ПЕРЕКОДИРОВАТЬ( ALLTRIM( ШтрихкодМаркировкиДляЧека ), "", "BASE64" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстМаркировка = ",/##CHR(13)##//##CHR(10)##/ ""markingCode"":{/##CHR(13)##//##CHR(10)##/ ""type"": ""other"",/##CHR(13)##//##CHR(10)##/ ""mark"": """ + markingCode + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ТекстМаркировка = "," + CHR(13) + """nomenclatureCode"": """ + markingCode + """";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем текст маркировки в позиции и завершаем объект позиции/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += ТекстМаркировка + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара -= Количество;/##CHR(13)##//##CHR(10)##/ СуммаПозиции -= Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""position"",/##CHR(13)##//##CHR(10)##/ ""name"": """ + XMLTRANS( LEFT( КомандыЧека.name, ПЕРЕМЕННАЯ( "_ККТОГРАНИЧЕНИЕДЛИНЫНАИМЕНОВАНИЯПОЗИЦИИ", 128) ) ) + """,/##CHR(13)##//##CHR(10)##/ ""price"": " + STR( ЦенаПродажиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""quantity"": " + КоличествоТовара + ",/##CHR(13)##//##CHR(10)##/ ""amount"": " + STR( СуммаПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""infoDiscountAmount"": " + STR( СуммаСкидкиПозиции, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ""department"": " + КомандыЧека.department + ",/##CHR(13)##//##CHR(10)##/ ""paymentMethod"": """ + PaymentMode + """,/##CHR(13)##//##CHR(10)##/ ""paymentObject"": """ + КомандыЧека.rsubject + """,/##CHR(13)##//##CHR(10)##/ ""tax"": {/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.kodn + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ "; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстПозицииЧека += "}";/##CHR(13)##//##CHR(10)##/ //добавляем полученную позицию к строкам чека/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, ТекстПозицииЧека, ФискальныйЧек, "position", "", "", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОплаты = "{/##CHR(13)##//##CHR(10)##/ ""type"": """ + КомандыЧека.closetype + """,/##CHR(13)##//##CHR(10)##/ ""sum"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ ДобавитьОплатуЧека( СтрокиОплатЧека, СтрокаОплаты, true, "payments"); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //соберем итоговый чек в формате JSON/##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека;/##CHR(13)##//##CHR(10)##/ //1. Добавим фискальные/нефискальные строки /##CHR(13)##//##CHR(10)##/ //добавим банковский слип, если установлен режим печати слипа вместе с чеком/##CHR(13)##//##CHR(10)##/ IF ( _БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ == true AND !ПУСТО( БанковскиеПозицииЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека += ЕСЛИ( ПРАВСИМВ(ТекстЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""preItems"": [/##CHR(13)##//##CHR(10)##/ " + БанковскиеПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека += ЕСЛИ( ПРАВСИМВ(ТекстЧека,1) <> ",", ",", "") + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим информацию о бонусах в чек/##CHR(13)##//##CHR(10)##/ IF (_ВЫВОДИТЬИНФОРМАЦИЮОБОНУСАХНАЧЕКЕ == true AND !ПУСТО( НОМЕРКАРТЫ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ТИПБОНУСА= ЗАПРОС( "SELECT bonusalias FROM sprbonus WHERE code IN ( SELECT bonus FROM sprmcard WHERE cardn = ''" + НОМЕРКАРТЫ + "'' )" );/##CHR(13)##//##CHR(10)##/ ОПЛАЧЕНОБОНУСОМ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''-'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ НАЧИСЛЕНОБОНУСОВ = STR( ЗАПРОС( "SELECT SUM( summa ) FROM specmcard_bonus WHERE cardn =''" + НОМЕРКАРТЫ + "'' AND priz= ''+'' AND chequeic= " + ИДОбъекта ), 10, 2);/##CHR(13)##//##CHR(10)##/ ОСТАТОКБОНУСОВ = STR( ЗАПРОС( "SELECT dbo.fn_calccard_bonus( ''" + НОМЕРКАРТЫ + "'', ''" + ТИПБОНУСА + "'', DEFAULT );" ), 10, 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Списано бонусов: " + ОПЛАЧЕНОБОНУСОМ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Начислено бонусов: " + НАЧИСЛЕНОБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Остаток бонусов: " + ОСТАТОКБОНУСОВ, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (TYPE("_СУММАСКИДКИВСЕГО") == "I" OR TYPE("_СУММАСКИДКИВСЕГО") == "B")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _СУММАСКИДКИВСЕГО > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "Ваша экономия составила: " + STR(_СУММАСКИДКИВСЕГО, 10, 2) + " руб.", false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, "---------------------------------------------", false, "text", "left", "none", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""postItems"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФискальныйЧек == true )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //2. Если фискальный чек, то добавим оплаты и итоговую сумму чека/##CHR(13)##//##CHR(10)##/ //total (число) - Итог чека. Может отличаться от суммы позиций на значение, равное копейкам чека. Если не задан - высчитывается автоматически из суммы всех позиций/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""payments"": [/##CHR(13)##//##CHR(10)##/ " + СтрокиОплатЧека + "/##CHR(13)##//##CHR(10)##/ ]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передача итога чека (если не передавать, то будет рассчитываться сам по суммам позиций)/##CHR(13)##//##CHR(10)##/ IF ( VAL(КомандыЧека.price) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + ",/##CHR(13)##//##CHR(10)##/ ""total"": " + STR( КомандыЧека.price, 16, 2) + "/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + CHR(13); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //3. Закрывающая фигурная скобка/##CHR(13)##//##CHR(10)##/ ТекстЧека = ТекстЧека + "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Пробъем на ККМ итоговый чек/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" );/##CHR(13)##//##CHR(10)##/ //если печать завершилась ошибкой, то предложим повторить печать/##CHR(13)##//##CHR(10)##/ IF ( РезультатПечатиЧека == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечатиЧека <> true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Чек не завершен в ККМ." + CHR(13) + "Повторить печать чека?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати чека",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, ФискальныйЧек, "" ); //повторим печать чека/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Вопрос = "Не печатать кассовый чек?";/##CHR(13)##//##CHR(10)##/ //ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать чека",4);/##CHR(13)##//##CHR(10)##/ //IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ РезультатПечатиЧека = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //конец повтора печати чека/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (РезультатПечатиЧека == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ ПечатьКопииЧекаНаФР("");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\СЛУЖЕБНЫЕ ФУНКЦИИ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФУНКЦИИ ДЛЯ РАБОТЫ ПЛАТЕЖНОЙ СИСТЕМЫ - НАЧАЛО/##CHR(13)##//##CHR(10)##/// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( ТипЧека )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4000);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ("Выполнить отмену транзакции или возврат?" + CHR(13) + "Да - ОТМЕНА, Нет - ВОЗВРАТ", "АЙТИДА-СБЕРБАНК", 4) == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4003);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4002);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка платежной системы: " + ОтветПС + "." + CHR(13) + "Чек не будет пробит на ККМ." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //включаем возможность аварийной отмены/##CHR(13)##//##CHR(10)##/ //для этого устанавливаем у транзакции статус "неподтвержденной"/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = _ККТСУММАБЕЗНАЛ*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6003);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( equipment, AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber )/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + КОДОБОРУДОВАНИЯ + "'', ''" + DriverPayCard.GParamString("AuthCode") + "'', " + DriverPayCard.GParamString("CardType") + ", " + DriverPayCard.GParamString("MerchantTSN") + ", " + /##CHR(13)##//##CHR(10)##/ DriverPayCard.GParamString("Amount")+ ", ''" + DriverPayCard.GParamString("ClientCard") + "'', " + DriverPayCard.GParamString("MerchantBatchNum") + ", ''" + DriverPayCard.GParamString("TrxDate") + "'', ''" + /##CHR(13)##//##CHR(10)##/ DriverPayCard.GParamString("TrxTime") + "'', " + DriverPayCard.GParamString("MerchantTSN") + ", ''" + DriverPayCard.GParamString("TermNum") + "'', ''" + DriverPayCard.GParamString("RRN") + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT TOP 1 code FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС), НОМЕРУСТРОЙСТВАДЛЯПС, КОДОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //получаем слип-чек и добавляем в чек/##CHR(13)##//##CHR(10)##/ СлипЧек = DriverPayCard.GParamString("Cheque");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РазделительСтрок = CHR(10);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа = 1;/##CHR(13)##//##CHR(10)##/ СлипЧекВрем = РазделительСтрок + СлипЧек;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( СтрокаСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьСтрокуЧека( ПозицииЧека, СтрокаСлипа, false, "text", "left", "words", _ШРИФТТЕКСТАДЛЯНЕФИСКАЛЬНОЙПЕЧАТИ);/##CHR(13)##//##CHR(10)##/ НомерСтрокиСлипа++;/##CHR(13)##//##CHR(10)##/ СтрокаСлипа = ПОЛУЧИТЬСЛОВО( СлипЧекВрем, РазделительСтрок, НомерСтрокиСлипа );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если установлен режим печати банковского слипа вместе с кассовым чеком и это первый слип и нет неявных ошибок ПС, /##CHR(13)##//##CHR(10)##/ //то запомним позиции банковского слипа для их последующего добавления к позициям кассового чека/##CHR(13)##//##CHR(10)##/ //При наличии неявных ошибок слип нужно все таки вывести пользователю для обработки результата/##CHR(13)##//##CHR(10)##/ IF (_БАКОВСКИЙСЛИПВМЕСТЕСЧЕКОМ == true AND НОМЕРКОПИИСЛИПА == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //запомним первый слип /##CHR(13)##//##CHR(10)##/ БанковскиеПозицииЧека = ПозицииЧека;/##CHR(13)##//##CHR(10)##/ //текущий слип очистим, чтобы не напечатался/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""nonFiscal"",";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЧека = ЗаголовокЧека + "/##CHR(13)##//##CHR(10)##/ ""items"": [/##CHR(13)##//##CHR(10)##/ " + ПозицииЧека + "/##CHR(13)##//##CHR(10)##/ ]/##CHR(13)##//##CHR(10)##/ }";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (РезультатПечати == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (РезультатПечати <> true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеПользователю = "Слип не напечатан в ККМ." + CHR(13) + "Повторить печать слипа?";/##CHR(13)##//##CHR(10)##/ КодОтвета = MESSAGEBOX(СообщениеПользователю,"Ошибка печати слипа",5);/##CHR(13)##//##CHR(10)##/ IF (КодОтвета==4) //если нажали "Повторить"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечати = АТОЛ_ПечатьКассовогоЧекаНаФР( ТекстЧека, false, ИНДЕКСУСТРОЙСВАПЕЧАТИ ); //повторим печать слипа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Отмена"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вопрос = "Вы действительно хотите отменить печать слипа?";/##CHR(13)##//##CHR(10)##/ ОтветНаВопрос = MESSAGEBOX(Вопрос,"Печать слипа",4);/##CHR(13)##//##CHR(10)##/ IF (ОтветНаВопрос == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатПечати = false;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если успешно напечатали нефискальный чек, то обнуляем текст чека и нефискальные строки/##CHR(13)##//##CHR(10)##/ ТекстЧека = "";/##CHR(13)##//##CHR(10)##/ ЗаголовокЧека = "";/##CHR(13)##//##CHR(10)##/ ПозицииЧека = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка платежной системы: " + ОтветПС + "." + CHR(13) + "Чек не будет пробит на ККМ." );/##CHR(13)##//##CHR(10)##/ //возвращаем ошибку/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФУНКЦИИ ДЛЯ РАБОТЫ ПЛАТЕЖНОЙ СИСТЕМЫ - КОНЕЦ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ = 0.000;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype varchar( 20 ), kodn varchar( 20 ),/##CHR(13)##//##CHR(10)##/ name varchar( 1024 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype varchar( 20 ), echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), /##CHR(13)##//##CHR(10)##/ rsubject varchar( 20 ), rvariant varchar( 20 ), marktype char(10), markbc varchar(MAX), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) AND _РАБОТАСЕГАИС )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 1/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 4/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 5/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = АТОЛ_ПолучитьКодВидаЧекаВККМ( ТипЧека, ЧЕККОРРЕКЦИИ ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("КОНТРАГЕНТ") == "U")/##CHR(13)##//##CHR(10)##/ КОНТРАГЕНТ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, clientcode )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, ''" + ТипЧекаККМ + "'', '''', 0, 0, 0, ''" + КОНТРАГЕНТ + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БанковскиеПозицииЧека = "";',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + '' '' + CHR( 13 ) + "Код: " + STDF( КОД ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Возврат/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Шаблон наименования товара;/##CHR(13)##//##CHR(10)##///по умолчанию шаблон пустой, т.е. не используется/##CHR(13)##//##CHR(10)##///при необходимости нужно раскомментировать один из примеров или прописать свой шаблон/##CHR(13)##//##CHR(10)##/ШАБЛОННАИМЕНОВАНИЯ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Примеры своего шаблона:/##CHR(13)##//##CHR(10)##///1. выводим код товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = Код + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///2. выводим артикул товара вместе с наименованием через пробел/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = АРТИКУЛ + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///3. выводим артикул, если не пустой, в противном случае выводим код вместе с наименованием/##CHR(13)##//##CHR(10)##///ШАБЛОННАИМЕНОВАНИЯ = ЕСЛИ( !ПУСТО(АРТИКУЛ), АРТИКУЛ, Код) + " " + Наименование;/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Переменные:/##CHR(13)##//##CHR(10)##///Код - код товара/##CHR(13)##//##CHR(10)##///ШТРИХКОД - штрихкод товара/##CHR(13)##//##CHR(10)##///АРТИКУЛ - артикул товара/##CHR(13)##//##CHR(10)##///НАИМЕНОВАНИЕ - наименование товара/##CHR(13)##//##CHR(10)##///ЦЕНА - цена учета товара/услуги/##CHR(13)##//##CHR(10)##///ЦЕНАПРОДАЖИ - цена продажи товара/услуги/##CHR(13)##//##CHR(10)##///СУММАПРОДАЖИ - сумма продажи по строке/##CHR(13)##//##CHR(10)##///СУММАНДС - сумма НДС по строке/##CHR(13)##//##CHR(10)##///КОЛИЧЕСТВО - количество товара/услуги в строке/##CHR(13)##//##CHR(10)##///ЕДИНИЦА - единица измерения товара/услуги/##CHR(13)##//##CHR(10)##///СУММАСКИДКИ - сумма скидки /##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///Функция STDF(Строка) - преобразует указанную строку к виду, в котором её можно безошибочно передать в SQL запросе/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = "commodity"; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = "excise"; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = "job"; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = "service"; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = "gamblingBet"; //ставка азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = "gamblingPrize"; //выигрыш азартной игры/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = "lottery"; //лотерейный билет/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[8]= "lotteryPrize"; //выигрыш лотереи/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[9]= "intellectualActivity"; //предоставление РИД/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[10]= "payment"; //платеж/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[11]= "agentCommission"; //агентское вознаграждение/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[12]= "pay"; //выплата/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[13]= "another"; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[14]= "proprietaryLaw"; //имущественное право/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[15]= "nonOperatingIncome"; //внереализационный доход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[16]= "otherContributions"; //иные платежи и взносы/страховые взносы/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[17]= "merchantTax"; //торговый сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[18]= "resortFee"; //курортный сбор/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[19]= "deposit"; //залог/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[20]= "consumption"; //расход/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[21]= "soleProprietorCPIContributions"; //взносы на ОПС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[22]= "cpiContributions"; //взносы на ОПС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[23]= "soleProprietorCMIContributions"; //взносы на ОМС ИП/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[24]= "cmiContributions"; //взносы на ОМС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[25]= "csiContributions"; //взносы на ОСС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[26]= "casinoPayment"; //платеж казино/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[27]= "fundsIssuance"; //выдача денежных средств/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[30]= "exciseWithoutMarking"; //подакцизный товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[31]= "exciseWithMarking"; //подакцизный товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[32]= "commodityWithoutMarking"; //товар, не имеющий код маркировки/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[33]= "commodityWithMarking"; //товар, имеющий код маркировки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = "fullPrepayment"; //"ПРЕДОПЛАТА 100%"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = "prepayment"; //"ПРЕДОПЛАТА"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[3] = "advance"; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[4] = "fullPayment"; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[5] = "partialPayment"; //"ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[6] = "credit"; //"ПЕРЕДАЧА В КРЕДИТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[7] = "creditPayment"; //"ОПЛАТА КРЕДИТА"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определяем налог в ККМ по коду налога в Айтиде/##CHR(13)##//##CHR(10)##/ КодНалога = АТОЛ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = false;/##CHR(13)##//##CHR(10)##///если подарочная карта без привязки к товару, то подменим предмет и способ расчета/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) == "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 10; //платеж/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 1; //аванс /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( Код ) AND LEFT( ШТРИХКОД, 6 ) <> "PCARD:" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = 1; //товар/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 2; //полный расчет/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ISNULL( sprres_g.rsubject, 0 ) AS rsubject, ISNULL( sprres_g.paytype, 0 ) AS paytype, " + ЕСЛИ( _ЕСТЬМАРКИРОВКА == 1, "sprres.f_mark", "0" ) + " AS f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex( ''SPR'', ''S02'', ''СпособРасчета'', sprres.code, 0, 0, '''' ), 0 ) AS ex_paytype/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.ex_paytype ) )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = ТоварИнфо.ex_paytype;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( VAL( ТоварИнфо.paytype ) == 1 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТоварИнфо.paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СпособРасчетаАйтида = 4;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ ПредметРасчетаАйтида ];/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[ СпособРасчетаАйтида ]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ROUND(summadiscount, 2);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСУММАЧЕКАРАСЧЕТНАЯ += ROUND( СуммаТовара, 2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ЕСЛИ( !ПУСТО(ШАБЛОННАИМЕНОВАНИЯ), STDF(ШАБЛОННАИМЕНОВАНИЯ), STDF( Наименование ) ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 2 ) + ", ''" + КодНалога + "'', ''" + ПредметРасчета + "'', ''" + СпособРасчета + "'', ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',102.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',103.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',104.00000000,'// Формат с ОФД не подразумевает наличие скидок/наценок/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'// Печать X-отчета/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///получим информацию о кассире/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/_ИННКАССИРА = ЗАПРОС("SELECT inn FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(КОДОБОРУДОВАНИЯ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ ОтсоединятьсяОтУстройства = ЗАПРОС("SELECT f_disconnect FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''") == 1;/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = CreateObject( "AddIn.Fptr10", 1 );/##CHR(13)##//##CHR(10)##/ fptr = _МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ];/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("fptr") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НастройкиККТ = ЗАПРОС("SELECT value FROM param_ex WHERE param = ''ATOLKKTSETTINGS" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(НастройкиККТ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //передаем настройки в драйвер /##CHR(13)##//##CHR(10)##/ fptr.setSettings(НастройкиККТ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //соединяемся с ккт/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяОборудования = ALLTRIM( ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + "''" ) );/##CHR(13)##//##CHR(10)##/ //если порт занят и в карточке оборудования установлен флаг "Отсоединяться от устройства", то запускаем попытка переподключения к ККТ, пока не освободится или не прервут/##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() == 3 ) //AND ОтсоединятьсяОтУстройства )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "ККМ """ + ИмяОборудования + """: Порт занят." + CHR(13) + "Переподключиться к ККМ?";/##CHR(13)##//##CHR(10)##/ WHILE ( fptr.errorCode() == 3 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ IF ( MESSAGEBOX(ТекстВопроса,"Ожидание ККМ",4) == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.Open(); //повтор соединения/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( fptr.errorCode() <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ Сообщение( "Ошибка " + fptr.errorCode() + " при установке связи с ККМ" + CHR(13) + "Описание ошибки: " + fptr.errorDescription(), "Ошибка работы с ККМ" );/##CHR(13)##//##CHR(10)##/ //_ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /* //проверка не нужна, т.к. она происходит автоматически при отправке запроса с заданием/##CHR(13)##//##CHR(10)##/ //сначала проверим статус чека и если открыт, то отменим его/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);/##CHR(13)##//##CHR(10)##/ fptr.queryData();/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);/##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаККМ <> fptr.LIBFPTR_RT_CLOSED )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.cancelReceipt();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - начало/##CHR(13)##//##CHR(10)##/ IF ( _КОНТРОЛИРОВАТЬРАСХОЖДЕНИЕДАТЫВРЕМЕНИ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим статус ККТ/##CHR(13)##//##CHR(10)##/ ТекстЗапросаСтатусККТ = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""getDeviceStatus""/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаСтатусККТ);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ ОтветСтатусККТ = fptr.getParamString( fptr.LIBFPTR_PARAM_JSON_DATA );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("СтатусККТ",ОтветСтатусККТ);/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ("СтатусККТ");/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON("ДанныеСтатусККТ",СтатусККТ.deviceStatus);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМСтрокой = ДанныеСтатусККТ.currentDateTime;/##CHR(13)##//##CHR(10)##/ ДатаВККМ = SUBSTR(ДатаВремяВККМСтрокой, 1, 10);/##CHR(13)##//##CHR(10)##/ ВремяВККМ = SUBSTR(ДатаВремяВККМСтрокой, 12, 8);/##CHR(13)##//##CHR(10)##/ ДатаВремяВККМ = CTOD(ДатаВККМ + " " + ВремяВККМ, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаВККМ + " " + ВремяВККМ + "'', 102)");/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //РазницаВСекундах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''sec'') );/##CHR(13)##//##CHR(10)##/ РазницаВМинутах = ABS( DATEDIFF(ДатаВремяВККМ, ТекущаяДата, ''min'') );/##CHR(13)##//##CHR(10)##/ IF ( РазницаВМинутах > _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ВремяККМ = ДатаВремяВККМ + "";/##CHR(13)##//##CHR(10)##/ ВремяПК = ТекущаяДата + "";/##CHR(13)##//##CHR(10)##/ ТекстВопроса = "Дата/Время в ПК """ + ВремяПК + """" + CHR(13) +/##CHR(13)##//##CHR(10)##/ "отличается от даты/времени в " + CHR(13) + /##CHR(13)##//##CHR(10)##/ "ККМ """ + ВремяККМ + """" + CHR(13) + /##CHR(13)##//##CHR(10)##/ "более чем на " + _ДОПУСТИМОЕРАСХОЖДЕНИЕВРЕМЕНИККМ + " минут." + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Установить дату/время в ККМ """ + ВремяПК + """?";/##CHR(13)##//##CHR(10)##/ ОТВЕТ = СООБЩЕНИЕ(ТекстВопроса,"Расхождение даты/времени в ККМ", 4);/##CHR(13)##//##CHR(10)##/ IF ( ОТВЕТ == 6 ) //если нажали "Да"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекущаяДата = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ ДатаНовая = DTOC(ТекущаяДата, 7, ".") + "";/##CHR(13)##//##CHR(10)##/ ВремяНовое = RIGHT( "00" + ЧАС(ТекущаяДата), 2) + ":" + RIGHT( "00" + МИНУТА(ТекущаяДата), 2) + ":" + RIGHT( "00" + СЕКУНДА(ТекущаяДата), 2) + "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //установим дату и время в ККМ/##CHR(13)##//##CHR(10)##/ //при этом воспользуемся стандартным способом установки через метод writeDateTime(), т.к. в драйвере 10.4.6 json метод установки даты/времени работал некорректно (сдвиг времени на час)/##CHR(13)##//##CHR(10)##/ НоваяДата = CTOD(ДатаНовая + " " + ВремяНовое, 7); //ЗАПРОС("SELECT CONVERT(datetime,''" + ДатаНовая + " " + ВремяНовое + "'', 102)");/##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, НоваяДата);/##CHR(13)##//##CHR(10)##/ fptr.writeDateTime();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка установки даты/времени в ККМ"); /##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в противном случае ничего не делаем/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //контроль даты и времени в ККМ - конец /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТекстЗапросаХОтчет = "/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ""type"": ""reportX"",/##CHR(13)##//##CHR(10)##/ ""operator"": {/##CHR(13)##//##CHR(10)##/ ""name"": """ + _ИМЯКАССИРА + """,/##CHR(13)##//##CHR(10)##/ ""vatin"": """ + _ИННКАССИРА + """/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, ТекстЗапросаХОтчет);/##CHR(13)##//##CHR(10)##/ fptr.processJson();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (fptr.errorCode() <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка (" + fptr.errorCode() + "): " + fptr.errorDescription();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(ТекстОшибки, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ //сброс ошибки/##CHR(13)##//##CHR(10)##/ fptr.resetError();/##CHR(13)##//##CHR(10)##/ IF (ОтсоединятьсяОтУстройства == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //закрываем соединение с ККТ/##CHR(13)##//##CHR(10)##/ IF (fptr.isOpened() == true AND ОтсоединятьсяОтУстройства)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ fptr.close();/##CHR(13)##//##CHR(10)##/ //fptr = false;/##CHR(13)##//##CHR(10)##/ //_МАССИВККТ[ VAL(КОДОБОРУДОВАНИЯ) ] = fptr;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка снятия Х-отчета. Не определен код оборудования", "Ошибка работы с ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'28.09.2022 12:19:04') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Атол v.5 (ФН, ФФД 1.05, ДТО 10) с платежной системой СБЕРБАНК','ФР',0.00000000,'Профиль для онлайн касс и фискальных регистраторов производства компании Атол с поддержкой работы по ФФД 1.0 - 1.05./##CHR(13)##//##CHR(10)##/Встроена возможность работы с платежной системой по старому варианту через драйвер Сбербанка',0.00000000,7387.00000000,0,'',0.00000000,'','',0,'F3AFD69C-6FE0-46C0-AAE5-7AB2397707BD',0,1,0,'28.09.2022 12:19:04') #begin #description Система лояльности UDS #name Система лояльности UDS #code 0000000223 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1422.00000000,'//Закрытие чека в ПС/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ВЫБРАТЬКОНТЕКСТ("UDS_Клиент") AND !ПУСТО( ПЕРЕМЕННАЯ( "UDS_ДанныеКлиента", "" ) ) )/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "UDS_Клиент", UDS_ДанныеКлиента );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатОперации = true;/##CHR(13)##//##CHR(10)##/IF ( ВЫБРАТЬКОНТЕКСТ("UDS_Клиент") ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатОперации = RESTAPI.UDS_ПровестиОперацию( VAL( ПЕРЕМЕННАЯ("ВСЕГОБОНУСОВ", 0) ), 0);/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("UDS_Клиент");/##CHR(13)##//##CHR(10)##/ RETURN РезультатОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПЕРЕМЕННАЯ( "_UDS_ПЕЧАТАТЬВАУЧЕРЫ", true ) == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатОперации = RESTAPI.UDS_СозданиеВаучера( VAL( ПЕРЕМЕННАЯ("_СУММАКОПЛАТЕ", 0) ), 0); /##CHR(13)##//##CHR(10)##/ RETURN РезультатОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN РезультатОперации;',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1427.00000000,'//Отмена чека в ПС/##CHR(13)##//##CHR(10)##/РезультатОперации = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПЕРЕМЕННАЯ("_ОПЕРАЦИЯ", "" ) == "ВОЗВРАТ" OR ПЕРЕМЕННАЯ("_ОПЕРАЦИЯ", "" ) == "ВОЗВРАТПРИХОДА" )/##CHR(13)##//##CHR(10)##/ RETURN РезультатОперации;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ВЫБРАТЬКОНТЕКСТ("UDS_Клиент") AND !ПУСТО( ПЕРЕМЕННАЯ( "UDS_ДанныеКлиента", "" ) ) )/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "UDS_Клиент", UDS_ДанныеКлиента );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ВЫБРАТЬКОНТЕКСТ("UDS_Клиент") ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РезультатОперации = RESTAPI.UDS_УдалениеПокупки( ПЕРЕМЕННАЯ("НОМЕРССЫЛКИ", 0 ), 0, 0 );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("UDS_Клиент");/##CHR(13)##//##CHR(10)##/ RETURN РезультатОперации;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("UDS_Клиент");/##CHR(13)##//##CHR(10)##/RETURN РезультатОперации;',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "UDS: система лояльности";',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1460.00000000,'//Свойства драйвера ПС/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/RETURN "UDS";',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1475.00000000,'//Окончание работы с ПС/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///RETURN ПЕРЕМЕННАЯ("ВСЕГОБОНУСОВ", 0);/##CHR(13)##//##CHR(10)##///здесь для UDS всегда будем возвращать 0, чтобы бонусы не распределялись по оплатам, поскольку они уже распределены как скидка на позиции в чеке/##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:08:54') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Система лояльности UDS','ПС',0.00000000,'',0.00000000,7554.00000000,0,'',0.00000000,'','',0,'26C79671-007B-435A-8B6C-0D5AB57FFAD8',0,1,0,'15.12.2022 16:10:20') #begin #description Обмен данными с SetRetail 10 #name Обмен данными с SetRetail 10 #code 0000000051 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##///ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/КодСтруктуры = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out, 0 );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/// если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/IF ( !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT temp.*, sprnn.nnvid, sprnn.identity_column AS ic, sprnn.ed, sprnn.manuf_code, sprnn.manuf AS country,/##CHR(13)##//##CHR(10)##/ ( SELECT proc_ FROM sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype <> '''' AND CHARINDEX( code, ( SELECT TOP 1 list FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = sprnn.kodn AND date <= GETDATE( ) /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC) ) > 0 ) AS vat,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN ex_code = '''' THEN code ELSE ex_code END FROM spredn WHERE code = sprnn.ed ) AS ed_code,/##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code ) AS manuf_name,/##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprcountry WHERE code = sprnn.manuf ) AS country_name/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Секция = ЕСЛИ( !ПУСТО( СписокТоваров.kkm_section ), ALLTRIM( STR( VAL( СписокТоваров.kkm_section ) ) ), "1" );/##CHR(13)##//##CHR(10)##/ НДС = /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT koef, barcode FROM " + ШТРИХКОДЫ + " WHERE nn = ''" + СписокТоваров.nn + "''", "СписокШК" );/##CHR(13)##//##CHR(10)##/ СтрокаШК = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаШК += "" + STR( СписокШК.koef ) + ""+/##CHR(13)##//##CHR(10)##/ "" + ЕСЛИ( НОМЕРСТРОКИ( "СписокШК" ) == 0, "true", "false" )+ "";/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ // Выгружаем список папок/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT name, ic FROM fn_getparentlist( ''S02'', " + СписокТоваров.ic + ", ''" + КодСтруктуры + "'' ) WHERE folder = 1 " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( КодСтруктуры ), "AND parent <> 0", "" ) + " ORDER BY identity_column DESC", "Папки" );/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "";/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРСТРОКИ( "Папки" ) < КОЛИЧЕСТВОСТРОК( "Папки" ) - 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "" + Сервис.XMLЗаменитьСимволы( Папки.name ) + "" + СтрокаПапок + "";/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Папки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "Папки" ) > 0 )/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "" + Сервис.XMLЗаменитьСимволы( Папки.name ) + "" + СтрокаПапок + "";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Папки" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ТипТовара = ЕСЛИ( !ПУСТО( СписокТоваров.nnvid ), "ProductSpiritsEntity", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.wareType == 0, "ProductWeightEntity", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.fractqty == 1, "ProductPieceWeightEntity", "ProductPieceEntity" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ""+/##CHR(13)##//##CHR(10)##/ "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.name ) + " " + СтрокаШК + /##CHR(13)##//##CHR(10)##/ "" + ТипТовара + "" + /##CHR(13)##//##CHR(10)##/ "2011-05-07T00:00:00.0002061-05-07T23:59:59.0001"+/##CHR(13)##//##CHR(10)##/ """" + Секция + """"+/##CHR(13)##//##CHR(10)##/ "" + STR( СписокТоваров.vat, 10, 2 ) + "" + СтрокаПапок +/##CHR(13)##//##CHR(10)##/ "" + СписокТоваров.ed + "" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.manuf_code ), "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.manuf_name ) + "", "" ) +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.manuf_code ), "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.country_name ) + "", "" ) +/##CHR(13)##//##CHR(10)##/ "" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.plu ), "", "" ) + "";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ // Если указан максимальный процент скидки или минимальная цена продажи, то добавляем эту информацию/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.maxdiscount != -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = " 2000-01-01T00:00:00.000 "+/##CHR(13)##//##CHR(10)##/ "2050-12-31T23:59:59.000 00:00:00.000 23:59:59.000"+/##CHR(13)##//##CHR(10)##/ "false MO TU WE TH FR SA SU ";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.min_cena > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "2000-01-01T00:00:00.000 "+/##CHR(13)##//##CHR(10)##/ "2050-12-31T23:59:59.000 00:00:00.000 23:59:59.000"+/##CHR(13)##//##CHR(10)##/ "false MO TU WE TH FR SA SU ";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;>=;" + ALLTRIM( time_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;<=;" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;>=;";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ""; //path_flag_out;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга purchase (один чек)/##CHR(13)##//##CHR(10)##/// shop long Номер магазина/##CHR(13)##//##CHR(10)##/// username string Имя кассира/##CHR(13)##//##CHR(10)##/// tabNumber long Табельный номер кассира/##CHR(13)##//##CHR(10)##/// operationType boolean Тип операции True – продажа, false - возврат/##CHR(13)##//##CHR(10)##/// operDay dateTime Операционный день/##CHR(13)##//##CHR(10)##/// cash long Номер кассы/##CHR(13)##//##CHR(10)##/// shift long Номер смены/##CHR(13)##//##CHR(10)##/// saletime dateTime Дата-время продажи/##CHR(13)##//##CHR(10)##/// number long Номер чека/##CHR(13)##//##CHR(10)##/// amount double Сумма чека/##CHR(13)##//##CHR(10)##/// discountAmount double Сумма скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга position (один товар в чеке)/##CHR(13)##//##CHR(10)##/// order long Номер позиции/##CHR(13)##//##CHR(10)##/// departNumber long Номер отдела/##CHR(13)##//##CHR(10)##/// goodsCode string Код товара/##CHR(13)##//##CHR(10)##/// barCode string ШК товара/##CHR(13)##//##CHR(10)##/// count double Количество/##CHR(13)##//##CHR(10)##/// cost double Цена за единицу/##CHR(13)##//##CHR(10)##/// nds double Значение НДС/##CHR(13)##//##CHR(10)##/// ndsSum double Сумма НДС/##CHR(13)##//##CHR(10)##/// ndsClass string Наименование налога/##CHR(13)##//##CHR(10)##/// discountValue double Сумма скидки/##CHR(13)##//##CHR(10)##/// costWithDiscount double Цена за единицу с учётом скидки/##CHR(13)##//##CHR(10)##/// amount double Стоимость позиции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга payment (оплата чека)/##CHR(13)##//##CHR(10)##/// typeClass string Тип оплаты/##CHR(13)##//##CHR(10)##/// CashPaymentEntity – наличные;/##CHR(13)##//##CHR(10)##/// CashChangePaymentEntity – сдача;/##CHR(13)##//##CHR(10)##/// BankCardPaymentEntity – безналичный;/##CHR(13)##//##CHR(10)##/// GiftCardPaymentEntity – подарочная карта;/##CHR(13)##//##CHR(10)##/// ConsumerCreditPaymentEntity – потребительский кредит/##CHR(13)##//##CHR(10)##/// ExternalBankTerminalPaymentEntity - внешний банковский терминал/##CHR(13)##//##CHR(10)##/// BonusCardPaymentEntity - оплата бонусами;/##CHR(13)##//##CHR(10)##/// ChildrenCardPaymentEntity – оплата Детской картой/##CHR(13)##//##CHR(10)##/// amount double Сумма/##CHR(13)##//##CHR(10)##/// description string Описание/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Тэг discountCard string Номер карты/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//* Пример/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ 0127/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ 0127/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписьТранзакции( tranzType )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ tranzCount = purchase_number * 65536 + СчетчикТэгов;/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##/ chequeType = ЕСЛИ( purchase_operationType, 0, 1 );/##CHR(13)##//##CHR(10)##/ БЫЛИТРАНЗАКЦИИПОФРВЫБРАННОМУВТО = true;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( purchase_saletime ) + "'', " + tranzType + ", " + STR( purchase_cash ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + purchase_tabNumber + ", '''', " + purchase_number + ", " + chequeType + ", " + purchase_shift + ", ''" + discountCard + "'',/##CHR(13)##//##CHR(10)##/ " + purchase_cash + ", '''', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', '''', '''', " + STR( position_count, 16, 3 ) + ", ''" + STDF( position_barCode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + purchase_shift + ", " + STR( position_amount, 16, 3 ) + ", 0, " + STR( position_cost * position_count, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( position_cost, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + purchase_cash + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + position_goodsCode + "'', " + payment_typeClass + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ИнициализацияПеременных( ЗаголовокЧека, ПозицияЧека, ОплатаЧека )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ЗаголовокЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ purchase_shop = 0; // Номер магазина/##CHR(13)##//##CHR(10)##/ purchase_username = ""; // Имя кассира/##CHR(13)##//##CHR(10)##/ purchase_tabNumber = 0; // Табельный номер кассира/##CHR(13)##//##CHR(10)##/ purchase_operationType = true; // Тип операции True – продажа, false - возврат/##CHR(13)##//##CHR(10)##/ purchase_operDay = {}; // Операционный день/##CHR(13)##//##CHR(10)##/ purchase_cash = 0; // Номер кассы/##CHR(13)##//##CHR(10)##/ purchase_shift = 0; // Номер смены/##CHR(13)##//##CHR(10)##/ purchase_saletime = {}; // Дата-время продажи/##CHR(13)##//##CHR(10)##/ purchase_number = 0; // Номер чека/##CHR(13)##//##CHR(10)##/ purchase_amount = 0.00; // Сумма чека/##CHR(13)##//##CHR(10)##/ purchase_discountAmount = 0.00; // Сумма скидки на чек/##CHR(13)##//##CHR(10)##/ СчетчикТэгов = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПозицияЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ position_order = 0; // Номер позиции/##CHR(13)##//##CHR(10)##/ position_departNumber = 0; // Номер отдела/##CHR(13)##//##CHR(10)##/ position_goodsCode = ""; // Код товара/##CHR(13)##//##CHR(10)##/ position_barCode = ""; // ШК товара/##CHR(13)##//##CHR(10)##/ position_count = 0.00; // Количество/##CHR(13)##//##CHR(10)##/ position_cost = 0.00; // Цена за единицу/##CHR(13)##//##CHR(10)##/ position_nds = 0.00; // Значение НДС/##CHR(13)##//##CHR(10)##/ position_ndsSum = 0.00; // Сумма НДС/##CHR(13)##//##CHR(10)##/ position_discountValue = 0.00; // Сумма скидки/##CHR(13)##//##CHR(10)##/ position_costWithDiscount = 0.00; // Цена за единицу с учётом скидки/##CHR(13)##//##CHR(10)##/ position_amount = 0.00; // Стоимость позиции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ОплатаЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_typeClass = 0; // Тип оплаты/##CHR(13)##//##CHR(10)##/ payment_amount = 0.00; // Сумма/##CHR(13)##//##CHR(10)##/ payment_amount_bn = 0.00; // Сумма безналичных платежей/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ discountCard = ""; // Номер карты/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ РазборФайлаПродажи( РодительТэга, ТипТэга, ИмяТэга, ЗначениеТэга, ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СчетчикТэгов++;/##CHR(13)##//##CHR(10)##/ // Фиксируем открытие тэга purchase инициализацией переменных/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ТипТэга ) == "тэг" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "purchase" ) ИнициализацияПеременных( true, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "position" ) ИнициализацияПеременных( false, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "payment" ) ИнициализацияПеременных( false, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountcard" ) ИнициализацияПеременных( false, false, false ); /##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "purchase" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если были безналичные оплаты, то проставляем их/##CHR(13)##//##CHR(10)##/ IF ( payment_amount_bn != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( payment_amount_bn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( purchase_number ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + purchase_cash + ")");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ position_amount = purchase_amount;/##CHR(13)##//##CHR(10)##/ position_cost = purchase_discountAmount + purchase_amount;/##CHR(13)##//##CHR(10)##/ position_count = 1;/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 55 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "payment" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Суммируем безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( payment_typeClass != 1 AND payment_typeClass != 8 ) payment_amount_bn += payment_amount;/##CHR(13)##//##CHR(10)##/ // Сдачу преобразуем в отрицательное число/##CHR(13)##//##CHR(10)##/ IF ( payment_typeClass == 8 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_amount = -payment_amount;/##CHR(13)##//##CHR(10)##/ payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 40 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountcard" ) discountCard= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "position" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ НАЙТИ( "СписокФР", "СписокФР.fr_code == ''" + STR( purchase_cash ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + STDF( position_goodsCode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, ЕСЛИ( ПУСТО( СПИСОКФР.firm ), ФИРМАПОУМОЛЧАНИЮ, СПИСОКФР.firm), ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 11 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ТипТэга ) == "атрибут" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( РодительТэга ) == "purchase" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "shop" ) purchase_shop= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "username" ) purchase_username= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "tabnumber" ) purchase_tabNumber= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "operationtype" ) purchase_operationType= ЗначениеТэга == "true";/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "operday" ) purchase_operDay= CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cash" ) purchase_cash= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shift" ) purchase_shift= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "saletime" ) purchase_saletime= CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "number" ) purchase_number= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) purchase_amount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountamount" ) purchase_discountAmount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( РодительТэга ) == "position" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "order" ) position_order= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "departnumber" ) position_departNumber= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "goodscode" ) position_goodsCode= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "barcode" ) position_barCode= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "count" ) position_count= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cost" ) position_cost= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "nds" ) position_nds= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "ndssum" ) position_ndsSum= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountvalue" ) position_discountValue= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "costwithdiscount" ) position_costWithDiscount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) position_amount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( РодительТэга ) == "payment" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "typeclass" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ЗначениеТэга ) == "cashpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "bankcardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "giftcardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "consumercreditpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 4;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "externalbankterminalpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "bonuscardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "childrencardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "cashchangepaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 8;/##CHR(13)##//##CHR(10)##/ ELSE payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_amount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ position_amount = payment_amount;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ИнициализацияПеременныхОтчета( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ purchase_shift = 0;/##CHR(13)##//##CHR(10)##/ purchase_shop = 0;/##CHR(13)##//##CHR(10)##/ purchase_number = 0;/##CHR(13)##//##CHR(10)##/ purchase_cash = 0;/##CHR(13)##//##CHR(10)##/ purchase_tabNumber = 0;/##CHR(13)##//##CHR(10)##/ purchase_saletime = {};/##CHR(13)##//##CHR(10)##/ position_amount = 0.00;/##CHR(13)##//##CHR(10)##/ position_costWithDiscount = 0.00;/##CHR(13)##//##CHR(10)##/ position_count = 1/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ РазборФайлаОтчета( РодительТэга, ТипТэга, ИмяТэга, ЗначениеТэга, ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "zreport" ) ИнициализацияПеременныхОтчета( ); /##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "zreport" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( purchase_saletime ) + "'' WHERE ecrsession = " + STR( VAL( purchase_shift ) ) + " AND fr_code= " + purchase_cash );/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 63 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shiftnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_shift = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shopnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_shop = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "docnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_number = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cashnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_cash = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "usertabnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_tabNumber = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "dateshiftclose" ) /##CHR(13)##//##CHR(10)##/ purchase_saletime = CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amountbycashpurchase" ) /##CHR(13)##//##CHR(10)##/ position_amount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amountcashdiscount" ) /##CHR(13)##//##CHR(10)##/ position_costWithDiscount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КоличествоФайлов > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файлов", КоличествоФайлов );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/НомерФайла = 1;/##CHR(13)##//##CHR(10)##/СчетчикТэгов = 0;/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = false;/##CHR(13)##//##CHR(10)##/WHILE ( НомерФайла <= КоличествоФайлов )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = ИменаФайловДляЗагрузки[ НомерФайла - 1 ];/##CHR(13)##//##CHR(10)##/ КраткоеИмяайла = SUBSTR( ИмяФайла, RAT( ИмяФайла, "\" ) + 1 );/##CHR(13)##//##CHR(10)##/ IF ( НомерФайла > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НомерФайла, КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ТИПФАЙЛА = LOWER( LEFT( КраткоеИмяайла, 8 ) );/##CHR(13)##//##CHR(10)##/ IF ( ТИПФАЙЛА != "purchase" AND ТИПФАЙЛА != "zreports" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + ".bak" );/##CHR(13)##//##CHR(10)##/ НомерФайла++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ fileHandle = ФАЙЛОТКРЫТЬ( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/ //------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстДляРазбора = ФАЙЛПРОЧИТАТЬ( fileHandle, "S", ФАЙЛРАЗМЕР( fileHandle ), CHR( 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ processCount = 0;/##CHR(13)##//##CHR(10)##/ итого = 0.00;/##CHR(13)##//##CHR(10)##/ ФИРМАПОУМОЛЧАНИЮ = @ФИРМАПОУМОЛЧАНИЮ;/##CHR(13)##//##CHR(10)##/ foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/ maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ БЫЛИТРАНЗАКЦИИПОФРВЫБРАННОМУВТО = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИнициализацияПеременных( true, true, true );/##CHR(13)##//##CHR(10)##/ ИнициализацияПеременныхОтчета( ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ТИПФАЙЛА == "purchase" )/##CHR(13)##//##CHR(10)##/ РАЗОБРАТЬ_XML( ТекстДляРазбора, "РазборФайлаПродажи" ); /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ РАЗОБРАТЬ_XML( ТекстДляРазбора, "РазборФайлаОтчета" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + ".bak" );/##CHR(13)##//##CHR(10)##/ НомерФайла++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Завершение загрузки данных./##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MESSAGEBOX("В файлах не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:20') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с SetRetail 10','ККМ',0.00000000,'',0.00000000,4339.00000000,0,'',0.00000000,'','',0,'827BEA32-569B-4C5C-98F1-1232EEE6C47C',0,1,0,'15.12.2022 16:09:20') #begin #description Обмен данными с SetRetail 10 (маркировка) #name Обмен данными с SetRetail 10 (маркировка) #code 0000000162 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга purchase (один чек)/##CHR(13)##//##CHR(10)##/// shop long Номер магазина/##CHR(13)##//##CHR(10)##/// username string Имя кассира/##CHR(13)##//##CHR(10)##/// tabNumber long Табельный номер кассира/##CHR(13)##//##CHR(10)##/// operationType boolean Тип операции True – продажа, false - возврат/##CHR(13)##//##CHR(10)##/// operDay dateTime Операционный день/##CHR(13)##//##CHR(10)##/// cash long Номер кассы/##CHR(13)##//##CHR(10)##/// shift long Номер смены/##CHR(13)##//##CHR(10)##/// saletime dateTime Дата-время продажи/##CHR(13)##//##CHR(10)##/// number long Номер чека/##CHR(13)##//##CHR(10)##/// amount double Сумма чека/##CHR(13)##//##CHR(10)##/// discountAmount double Сумма скидки на чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга position (один товар в чеке)/##CHR(13)##//##CHR(10)##/// order long Номер позиции/##CHR(13)##//##CHR(10)##/// departNumber long Номер отдела/##CHR(13)##//##CHR(10)##/// goodsCode string Код товара/##CHR(13)##//##CHR(10)##/// barCode string ШК товара/##CHR(13)##//##CHR(10)##/// count double Количество/##CHR(13)##//##CHR(10)##/// cost double Цена за единицу/##CHR(13)##//##CHR(10)##/// nds double Значение НДС/##CHR(13)##//##CHR(10)##/// ndsSum double Сумма НДС/##CHR(13)##//##CHR(10)##/// ndsClass string Наименование налога/##CHR(13)##//##CHR(10)##/// discountValue double Сумма скидки/##CHR(13)##//##CHR(10)##/// costWithDiscount double Цена за единицу с учётом скидки/##CHR(13)##//##CHR(10)##/// amount double Стоимость позиции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Атрибуты тэга payment (оплата чека)/##CHR(13)##//##CHR(10)##/// typeClass string Тип оплаты/##CHR(13)##//##CHR(10)##/// CashPaymentEntity – наличные;/##CHR(13)##//##CHR(10)##/// CashChangePaymentEntity – сдача;/##CHR(13)##//##CHR(10)##/// BankCardPaymentEntity – безналичный;/##CHR(13)##//##CHR(10)##/// GiftCardPaymentEntity – подарочная карта;/##CHR(13)##//##CHR(10)##/// ConsumerCreditPaymentEntity – потребительский кредит/##CHR(13)##//##CHR(10)##/// ExternalBankTerminalPaymentEntity - внешний банковский терминал/##CHR(13)##//##CHR(10)##/// BonusCardPaymentEntity - оплата бонусами;/##CHR(13)##//##CHR(10)##/// ChildrenCardPaymentEntity – оплата Детской картой/##CHR(13)##//##CHR(10)##/// amount double Сумма/##CHR(13)##//##CHR(10)##/// description string Описание/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Тэг discountCard string Номер карты/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##//* Пример/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ 0127/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ 0127/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписьТранзакции( tranzType )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ tranzCount = purchase_number * 65536 + СчетчикТэгов;/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##/ chequeType = ЕСЛИ( purchase_operationType, 0, 1 );/##CHR(13)##//##CHR(10)##/ БЫЛИТРАНЗАКЦИИПОФРВЫБРАННОМУВТО = true;/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( purchase_saletime ) + "'', " + tranzType + ", " + STR( purchase_cash ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + purchase_tabNumber + ", '''', " + purchase_number + ", " + chequeType + ", " + purchase_shift + ", ''" + discountCard + "'',/##CHR(13)##//##CHR(10)##/ " + purchase_cash + ", '''', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', '''', '''', " + STR( position_count, 16, 3 ) + ", ''" + STDF( position_barCode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + purchase_shift + ", " + STR( position_amount, 16, 3 ) + ", 0, " + STR( position_cost * position_count, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( position_cost, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + purchase_cash + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + position_goodsCode + "'', " + payment_typeClass + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ИнициализацияПеременных( ЗаголовокЧека, ПозицияЧека, ОплатаЧека )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ЗаголовокЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ purchase_shop = 0; // Номер магазина/##CHR(13)##//##CHR(10)##/ purchase_username = ""; // Имя кассира/##CHR(13)##//##CHR(10)##/ purchase_tabNumber = 0; // Табельный номер кассира/##CHR(13)##//##CHR(10)##/ purchase_operationType = true; // Тип операции True – продажа, false - возврат/##CHR(13)##//##CHR(10)##/ purchase_operDay = {}; // Операционный день/##CHR(13)##//##CHR(10)##/ purchase_cash = 0; // Номер кассы/##CHR(13)##//##CHR(10)##/ purchase_shift = 0; // Номер смены/##CHR(13)##//##CHR(10)##/ purchase_saletime = {}; // Дата-время продажи/##CHR(13)##//##CHR(10)##/ purchase_number = 0; // Номер чека/##CHR(13)##//##CHR(10)##/ purchase_amount = 0.00; // Сумма чека/##CHR(13)##//##CHR(10)##/ purchase_discountAmount = 0.00; // Сумма скидки на чек/##CHR(13)##//##CHR(10)##/ СчетчикТэгов = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПозицияЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ position_order = 0; // Номер позиции/##CHR(13)##//##CHR(10)##/ position_departNumber = 0; // Номер отдела/##CHR(13)##//##CHR(10)##/ position_goodsCode = ""; // Код товара/##CHR(13)##//##CHR(10)##/ position_barCode = ""; // ШК товара/##CHR(13)##//##CHR(10)##/ position_count = 0.00; // Количество/##CHR(13)##//##CHR(10)##/ position_cost = 0.00; // Цена за единицу/##CHR(13)##//##CHR(10)##/ position_nds = 0.00; // Значение НДС/##CHR(13)##//##CHR(10)##/ position_ndsSum = 0.00; // Сумма НДС/##CHR(13)##//##CHR(10)##/ position_discountValue = 0.00; // Сумма скидки/##CHR(13)##//##CHR(10)##/ position_costWithDiscount = 0.00; // Цена за единицу с учётом скидки/##CHR(13)##//##CHR(10)##/ position_amount = 0.00; // Стоимость позиции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ОплатаЧека )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_typeClass = 0; // Тип оплаты/##CHR(13)##//##CHR(10)##/ payment_amount = 0.00; // Сумма/##CHR(13)##//##CHR(10)##/ payment_amount_bn = 0.00; // Сумма безналичных платежей/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ discountCard = ""; // Номер карты/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ РазборФайлаПродажи( РодительТэга, ТипТэга, ИмяТэга, ЗначениеТэга, ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СчетчикТэгов++;/##CHR(13)##//##CHR(10)##/ // Фиксируем открытие тэга purchase инициализацией переменных/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ТипТэга ) == "тэг" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "purchase" ) ИнициализацияПеременных( true, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "position" ) ИнициализацияПеременных( false, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "payment" ) ИнициализацияПеременных( false, true, true ); /##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountcard" ) ИнициализацияПеременных( false, false, false ); /##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "purchase" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если были безналичные оплаты, то проставляем их/##CHR(13)##//##CHR(10)##/ IF ( payment_amount_bn != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( payment_amount_bn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( purchase_number ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + purchase_cash + ")");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ position_amount = purchase_amount;/##CHR(13)##//##CHR(10)##/ position_cost = purchase_discountAmount + purchase_amount;/##CHR(13)##//##CHR(10)##/ position_count = 1;/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 55 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "payment" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Суммируем безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( payment_typeClass != 1 AND payment_typeClass != 8 ) payment_amount_bn += payment_amount;/##CHR(13)##//##CHR(10)##/ // Сдачу преобразуем в отрицательное число/##CHR(13)##//##CHR(10)##/ IF ( payment_typeClass == 8 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_amount = -payment_amount;/##CHR(13)##//##CHR(10)##/ payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 40 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountcard" ) discountCard= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "position" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ НАЙТИ( "СписокФР", "СписокФР.fr_code == ''" + STR( purchase_cash ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + STDF( position_goodsCode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, ЕСЛИ( ПУСТО( СПИСОКФР.firm ), ФИРМАПОУМОЛЧАНИЮ, СПИСОКФР.firm), ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 11 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ТипТэга ) == "атрибут" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( РодительТэга ) == "purchase" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "shop" ) purchase_shop= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "username" ) purchase_username= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "tabnumber" ) purchase_tabNumber= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "operationtype" ) purchase_operationType= ЗначениеТэга == "true";/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "operday" ) purchase_operDay= CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cash" ) purchase_cash= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shift" ) purchase_shift= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "saletime" ) purchase_saletime= CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "number" ) purchase_number= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) purchase_amount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountamount" ) purchase_discountAmount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( РодительТэга ) == "position" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "order" ) position_order= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "departnumber" ) position_departNumber= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "goodscode" ) position_goodsCode= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "barcode" ) position_barCode= ЗначениеТэга;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "count" ) position_count= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cost" ) position_cost= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "nds" ) position_nds= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "ndssum" ) position_ndsSum= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "discountvalue" ) position_discountValue= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "costwithdiscount" ) position_costWithDiscount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) position_amount= VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( РодительТэга ) == "payment" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "typeclass" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ЗначениеТэга ) == "cashpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "bankcardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "giftcardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "consumercreditpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 4;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "externalbankterminalpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "bonuscardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "childrencardpaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ЗначениеТэга ) == "cashchangepaymententity" )/##CHR(13)##//##CHR(10)##/ payment_typeClass = 8;/##CHR(13)##//##CHR(10)##/ ELSE payment_typeClass = 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amount" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ payment_amount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ position_amount = payment_amount;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ИнициализацияПеременныхОтчета( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ purchase_shift = 0;/##CHR(13)##//##CHR(10)##/ purchase_shop = 0;/##CHR(13)##//##CHR(10)##/ purchase_number = 0;/##CHR(13)##//##CHR(10)##/ purchase_cash = 0;/##CHR(13)##//##CHR(10)##/ purchase_tabNumber = 0;/##CHR(13)##//##CHR(10)##/ purchase_saletime = {};/##CHR(13)##//##CHR(10)##/ position_amount = 0.00;/##CHR(13)##//##CHR(10)##/ position_costWithDiscount = 0.00;/##CHR(13)##//##CHR(10)##/ position_count = 1/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ РазборФайлаОтчета( РодительТэга, ТипТэга, ИмяТэга, ЗначениеТэга, ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ТэгЗакрыт )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "zreport" ) ИнициализацияПеременныхОтчета( ); /##CHR(13)##//##CHR(10)##/ RETURN;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( LOWER( ИмяТэга ) == "zreport" ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( purchase_saletime ) + "'' WHERE ecrsession = " + STR( VAL( purchase_shift ) ) + " AND fr_code= " + purchase_cash );/##CHR(13)##//##CHR(10)##/ ЗаписьТранзакции( 63 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shiftnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_shift = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "shopnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_shop = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "docnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_number = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "cashnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_cash = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "usertabnumber" ) /##CHR(13)##//##CHR(10)##/ purchase_tabNumber = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "dateshiftclose" ) /##CHR(13)##//##CHR(10)##/ purchase_saletime = CTOD( ЗАМЕНИТЬ( LEFT( ЗначениеТэга, 19 ), "T", " " ), 7 );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amountbycashpurchase" ) /##CHR(13)##//##CHR(10)##/ position_amount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/ ELSE IF ( LOWER( ИмяТэга ) == "amountcashdiscount" ) /##CHR(13)##//##CHR(10)##/ position_costWithDiscount = VAL( ЗначениеТэга );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФАЙЛСПИСОК( СЖАТЬПРОБЕЛЫ( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КоличествоФайлов > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файлов", КоличествоФайлов );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/НомерФайла = 1;/##CHR(13)##//##CHR(10)##/СчетчикТэгов = 0;/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = false;/##CHR(13)##//##CHR(10)##/WHILE ( НомерФайла <= КоличествоФайлов )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = ИменаФайловДляЗагрузки[ НомерФайла - 1 ];/##CHR(13)##//##CHR(10)##/ КраткоеИмяайла = SUBSTR( ИмяФайла, RAT( ИмяФайла, "\" ) + 1 );/##CHR(13)##//##CHR(10)##/ IF ( НомерФайла > 1 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НомерФайла, КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ТИПФАЙЛА = LOWER( LEFT( КраткоеИмяайла, 8 ) );/##CHR(13)##//##CHR(10)##/ IF ( ТИПФАЙЛА != "purchase" AND ТИПФАЙЛА != "zreports" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + ".bak" );/##CHR(13)##//##CHR(10)##/ НомерФайла++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + КраткоеИмяайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ fileHandle = ФАЙЛОТКРЫТЬ( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/ //------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстДляРазбора = ФАЙЛПРОЧИТАТЬ( fileHandle, "S", ФАЙЛРАЗМЕР( fileHandle ), CHR( 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ processCount = 0;/##CHR(13)##//##CHR(10)##/ итого = 0.00;/##CHR(13)##//##CHR(10)##/ ФИРМАПОУМОЛЧАНИЮ = @ФИРМАПОУМОЛЧАНИЮ;/##CHR(13)##//##CHR(10)##/ foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/ maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ БЫЛИТРАНЗАКЦИИПОФРВЫБРАННОМУВТО = FALSE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИнициализацияПеременных( true, true, true );/##CHR(13)##//##CHR(10)##/ ИнициализацияПеременныхОтчета( ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ТИПФАЙЛА == "purchase" )/##CHR(13)##//##CHR(10)##/ РАЗОБРАТЬ_XML( ТекстДляРазбора, "РазборФайлаПродажи" ); /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ РАЗОБРАТЬ_XML( ТекстДляРазбора, "РазборФайлаОтчета" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + ".bak" );/##CHR(13)##//##CHR(10)##/ НомерФайла++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Завершение загрузки данных./##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДАТАВРЕМЯ( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MESSAGEBOX("В файлах не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##///ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ""; //path_flag_out;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/КодСтруктуры = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out, 0 );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/// если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/IF ( !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT temp.*, sprnn.nnvid, sprnn.identity_column AS ic, sprnn.ed, sprnn.manuf_code, sprnn.manuf AS country,/##CHR(13)##//##CHR(10)##/ sprnn.f_mark, sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ ( SELECT proc_ FROM sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype <> '''' AND CHARINDEX( code, ( SELECT TOP 1 list FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = sprnn.kodn AND date <= GETDATE( ) /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC) ) > 0 ) AS vat,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN ex_code = '''' THEN code ELSE ex_code END FROM spredn WHERE code = sprnn.ed ) AS ed_code,/##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code ) AS manuf_name,/##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprcountry WHERE code = sprnn.manuf ) AS country_name/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON temp.nn = sprnn.nn", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Секция = ЕСЛИ( !ПУСТО( СписокТоваров.kkm_section ), ALLTRIM( STR( VAL( СписокТоваров.kkm_section ) ) ), "1" );/##CHR(13)##//##CHR(10)##/ НДС = /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT koef, barcode FROM " + ШТРИХКОДЫ + " WHERE nn = ''" + СписокТоваров.nn + "''", "СписокШК" );/##CHR(13)##//##CHR(10)##/ СтрокаШК = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаШК += "" + STR( СписокШК.koef ) + ""+/##CHR(13)##//##CHR(10)##/ "" + ЕСЛИ( НОМЕРСТРОКИ( "СписокШК" ) == 0, "true", "false" )+ "";/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ // Выгружаем список папок/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT name, ic FROM fn_getparentlist( ''S02'', " + СписокТоваров.ic + ", ''" + КодСтруктуры + "'' ) WHERE folder = 1 " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( КодСтруктуры ), "AND parent <> 0", "" ) + " ORDER BY identity_column DESC", "Папки" );/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "";/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРСТРОКИ( "Папки" ) < КОЛИЧЕСТВОСТРОК( "Папки" ) - 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "" + Сервис.XMLЗаменитьСимволы( Папки.name ) + "" + СтрокаПапок + "";/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Папки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "Папки" ) > 0 )/##CHR(13)##//##CHR(10)##/ СтрокаПапок = "" + Сервис.XMLЗаменитьСимволы( Папки.name ) + "" + СтрокаПапок + "";/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Папки" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mMarkGroup = "";/##CHR(13)##//##CHR(10)##/ ТипТовара = ЕСЛИ( СписокТоваров.wareType == 0, "ProductWeightEntity", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.fractqty == 1, "ProductPieceWeightEntity", "ProductPieceEntity" ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокТоваров.nnvid ) )/##CHR(13)##//##CHR(10)##/ ТипТовара = "ProductSpiritsEntity";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.f_mark AND СписокТоваров.markgroup == "0005" )/##CHR(13)##//##CHR(10)##/ ТипТовара = "ProductCiggyEntity";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.f_mark AND ( СписокТоваров.markgroup == "1520" OR СписокТоваров.markgroup == "0002" ) )/##CHR(13)##//##CHR(10)##/ ТипТовара = "ProductClothingEntity";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.f_mark AND СписокТоваров.wareType == 0 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ //Тип маркированного товара:/##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0002", "", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", "", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0005", "TOBACCO", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", "FOOTWEAR", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9999", "", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", "LIGHT_INDUSTRY", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", "TYRES", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", "PHOTO", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9995", "PERFUMES", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9994", "", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", "MILK", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9991", "JEWELRY", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0000", "", "" ) ) ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ""+/##CHR(13)##//##CHR(10)##/ "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.name ) + " " + СтрокаШК + /##CHR(13)##//##CHR(10)##/ "" + ТипТовара + "" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( mMarkGroup ), "" + mMarkGroup + "", "") + /##CHR(13)##//##CHR(10)##/ "2011-05-07T00:00:00.0002061-05-07T23:59:59.0001"+/##CHR(13)##//##CHR(10)##/ """" + Секция + """"+/##CHR(13)##//##CHR(10)##/ "" + STR( СписокТоваров.vat, 10, 2 ) + "" + СтрокаПапок +/##CHR(13)##//##CHR(10)##/ "" + СписокТоваров.ed + "" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.manuf_code ), "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.manuf_name ) + "", "" ) +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.manuf_code ), "" + Сервис.XMLЗаменитьСимволы( СписокТоваров.country_name ) + "", "" ) +/##CHR(13)##//##CHR(10)##/ "" +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( СписокТоваров.plu ), "", "" ) + "";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ // Если указан максимальный процент скидки или минимальная цена продажи, то добавляем эту информацию/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.maxdiscount != -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = " 2000-01-01T00:00:00.000 "+/##CHR(13)##//##CHR(10)##/ "2050-12-31T23:59:59.000 00:00:00.000 23:59:59.000"+/##CHR(13)##//##CHR(10)##/ "false MO TU WE TH FR SA SU ";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.min_cena > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "2000-01-01T00:00:00.000 "+/##CHR(13)##//##CHR(10)##/ "2050-12-31T23:59:59.000 00:00:00.000 23:59:59.000"+/##CHR(13)##//##CHR(10)##/ "false MO TU WE TH FR SA SU ";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( СТРОКА, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ( "", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;>=;" + ALLTRIM( time_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;<=;" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;>=;";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'15.12.2022 16:09:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с SetRetail 10 (маркировка)','ККМ',0.00000000,'',0.00000000,344.00000000,0,'',0.00000000,'','',0,'81239D1D-A7C7-4ED9-AE8F-5464FB7EFEE0',0,1,0,'15.12.2022 16:09:20') #begin #description Весы электронные CAS (AD/AP) #name Весы электронные CAS (AD/AP) #code 0000000224 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/Public ПортВесов;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПортВесов = ЗАПРОС("SELECT port_n FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:30') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "Cas_AD_AP.Scale", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера Cas_AD_AP.Scale" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Connect(ПортВесов, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключится к весам. Проверьте соединение." );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WAIT(3000); //ждем 3 секунды после соединения/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///пытаемся получить вес/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.UpdateOnlyWeight( );/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка получения веса с весов" );/##CHR(13)##//##CHR(10)##/ //отключаемся/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Disconnect();/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///отключаемся от весов/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Disconnect();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'15.12.2022 16:09:30') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы электронные CAS (AD/AP)','ВЕСЫБЭ',0.00000000,'',0.00000000,4748.00000000,0,'',0.00000000,'','',0,'BEF3657E-7064-439C-A602-8C839C907D83',0,1,0,'15.12.2022 16:10:14') #begin #description Платежная система СБЕРБАНК #name Платежная система СБЕРБАНК #code 0000000215 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1435.00000000,'//Закрытие смены в ПС/##CHR(13)##//##CHR(10)##/ФР.ПССБЕРБАНК_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() )/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1455.00000000,'//Наименование модели ПС/##CHR(13)##//##CHR(10)##/RETURN "СБЕР: платежная система";',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1400.00000000,'//Инициализация ПС/##CHR(13)##//##CHR(10)##/PUBLIC _ККТСУММАБЕЗНАЛ;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1420.00000000,'//Расчет суммы оплаты/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Расчет суммы оплаты. СУММАКОПЛАТЕ = " + STR( СУММАКОПЛАТЕ, 16, 2 ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE ("SPLITPSYSTEM") == "U" )/##CHR(13)##//##CHR(10)##/ SPLITPSYSTEM = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НОМЕРФР ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //возвращаем сумму позиций с номером ФР, совпадающие с кодом ФР в карточке платежной системы/##CHR(13)##//##CHR(10)##/ //сюда же плюсуем сумму позиций, для которых код ФР не задан (продажа по свободной цене, аванс, предоплата)/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕФР[ НОМЕРФР ] + СУММАКОПЛАТЕФР[ 0 ];/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN _ККТСУММАБЕЗНАЛ;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1425.00000000,'//Выполнить оплату/##CHR(13)##//##CHR(10)##/// Авторизация платежной системы/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( "Авторизация платежной системы." + СимвПС +/##CHR(13)##//##CHR(10)##/ "НОМЕРССЫЛКИ = " + НОМЕРССЫЛКИ, ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///определяем тип чека/##CHR(13)##//##CHR(10)##/ТипЧекаАйтида = ФР.ПС_ПолучитьТипЧекаПоОперации();/##CHR(13)##//##CHR(10)##///если чек не входит в список допустимых операций, для которых можно провести банковскую авторизацию, то ничего не выполняем/##CHR(13)##//##CHR(10)##/IF ( !ВСПИСКЕ(ТипЧекаАйтида, 0, 1, 6) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимая операция", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ККТСУММАБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера платежных систем." + CHR(13) + "Проверьте корректность установки компонент Сбербанка.","Ошибка загрузки драйвера ПС");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС); /##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Department", НОМЕРУСТРОЙСТВА - 1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( НОМЕРССЫЛКИ ) )/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("RRN", НОМЕРССЫЛКИ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ФР.ПССБЕРБАНК_ВыполнитьИСохранитьАвторизацию( ТипЧека ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ("_ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ", false) == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.NFun(6004);/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Не определена сумма оплаты по платежной системе", ФР.ИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1462.00000000,'//Печать отчетов ПС/##CHR(13)##//##CHR(10)##/IF ( ТипОтчета == 50 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФР.ПССБЕРБАНК_ВыполнитьИСохранитьСверкуИтогов( ФР.ПСКОДОБОРУДОВАНИЯ() ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1463.00000000,'//Список отчетов ПС/##CHR(13)##//##CHR(10)##/RETURN "ПС Сбер: Сверка итогов|50";',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1465.00000000,'//Имя устройства ПС/##CHR(13)##//##CHR(10)##/RETURN "Отдел № " + VAL(ИНДЕКСУСТРОЙСТВА + 1);',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1470.00000000,'//Количество зарегистрированных устройств в драйвере ПС/##CHR(13)##//##CHR(10)##/RETURN 5;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1475.00000000,'//Окончание работы с ПС/##CHR(13)##//##CHR(10)##/DriverPayCard = false;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1430.00000000,'//Отменить оплату/##CHR(13)##//##CHR(10)##/РезультатОтмены = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("DriverPayCard") <> "O" )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "SBRFSRV.Server", 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("DriverPayCard") <> "O")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение( "Не удалось создать объект драйвера платежных систем." + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Проверьте корректность установки компонент Сбербанка.", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = СУММАКОПЛАТЕ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ ( "Производится отмена транзакции через платежную систему", ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/IF ( ПЕРЕМЕННАЯ("_ИСПОЛЬЗОВАТЬНЕПОДТВЕРЖДЕННЫЕТРАНЗАКЦИИ", false) == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ, 2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Department", НОМЕРУСТРОЙСТВА - 1);/##CHR(13)##//##CHR(10)##/ //аварийная отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(6004); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатОтмены = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "НЕ УДАЛОСЬ ПРОИЗВЕСТИ АВАРИЙНУЮ ОТМЕНУ БАНКОВСКОЙ ТРАНЗАКЦИИ" + CHR(13) + CHR(10) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + ФР.ПССБЕРБАНК_ПолучитьОписаниеОшибки( ОтветПС ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаОплатыПС = ROUND( _ККТСУММАБЕЗНАЛ,2)*100;/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Amount", СуммаОплатыПС);/##CHR(13)##//##CHR(10)##/ DriverPayCard.SParam ("Department", НОМЕРУСТРОЙСТВА - 1);/##CHR(13)##//##CHR(10)##/ //отмена транзакции/##CHR(13)##//##CHR(10)##/ ОтветПС = DriverPayCard.NFun(4003); /##CHR(13)##//##CHR(10)##/ IF ( ОтветПС <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РезультатОтмены = false;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "ВНИМАНИЕ! ВОЗМОЖНЫ РАСХОЖДЕНИЯ ДАННЫХ ИБ И ДАННЫХ В ККМ. ОШИБКА ( " + ОтветПС + ")" + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "НЕ УДАЛОСЬ ОТМЕНИТЬ БАНКОВСКУЮ ТРАНЗАКЦИЮ" + CHR(13) + CHR(10) + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + ФР.ПССБЕРБАНК_ПолучитьОписаниеОшибки( ОтветПС ), ФР.ПСИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/DriverPayCard.Clear();/##CHR(13)##//##CHR(10)##/DriverPayCard = false;/##CHR(13)##//##CHR(10)##/_ККТСУММАБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN РезультатОтмены;',0,0,1,0,'15.12.2022 16:09:41') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Платежная система СБЕРБАНК','ПС',0.00000000,'Профиль для работы с платежной системой Сбербанка (прямая интеграция). Совместим с Айтида начиная с версии 4.4.5',0.00000000,7502.00000000,0,'',0.00000000,'','',0,'438DF9CB-9339-4184-896C-11A76B3FC1BA',0,1,0,'15.12.2022 16:09:41') #begin #description Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05) #name Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05) #code 0000000183 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаДляЗаписи, "ANSI", "OEM"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + Команда + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( Команда );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( Команда, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( Команда, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда + STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Проверка наличия ответа на предыдущую команду " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ ПредОтвет = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Ответ на предыдущую команду от ККМ: " + ПредОтвет + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = ""; /##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ЖдатьОтвета == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ НачальноеВремя = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 10 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND DATEDIFF( НачальноеВремя, ДАТАВРЕМЯ(), ''sec'') <= 10)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций*2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Массив: " + МАССИВИЗСТРОКИ( СтрокаКоманды ) + CHR(13) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ //ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер смены" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = НомерСмены; /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер чека" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если значение GTIN получается меньше 6 байт то дополняет до 6 байт (в нашем случае строка, поэтому дополняем до 12 символов)/##CHR(13)##//##CHR(10)##/ GTINHEX = RIGHT( "000000000000" + GTINHEX, 12);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = STRTRANC( STRTRANC( LEFT( КомандыЧека.name,128), """", "" ), ",", ".");/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( НаименованиеТовара, "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true; //ЗАПРОС( "SELECT printdiscounttype FROM sprequipment WHERE code = ''" + ФРКОДОБОРУДОВАНИЯ + "''" ) == 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,306.00000000,0,'',0.00000000,'','',0,'89B95FDF-B445-4D7F-AAF0-F04ECE7542A9',0,1,0,'30.12.2022 18:01:39') #begin #description Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000184 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаДляЗаписи, "ANSI", "OEM"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + Команда + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( Команда );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( Команда, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( Команда, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = Команда + STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //предыдущий ответ/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Проверка наличия ответа на предыдущую команду " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредОтвет = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Ответ на предыдущую команду от ККМ: " + ПредОтвет + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ЖдатьОтвета == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ НачальноеВремя = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 10 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND DATEDIFF( НачальноеВремя, ДАТАВРЕМЯ(), ''sec'') <= 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций*2 ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Массив: " + МАССИВИЗСТРОКИ( СтрокаКоманды ) + CHR(13) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = ПЕРЕКОДИРОВАТЬ( LEFT( ПечатаемаяСтрока, 72) , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = ПЕРЕКОДИРОВАТЬ( Штрихкод , "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога, ИмяТаблицыСтрокСлипа;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ() == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##///ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "V";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "O";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "G";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ ОтветОтрезки = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ИмяТаблицыСтрокСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = НомерСмены;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Статус смены: "+СтатусСмены);/##CHR(13)##//##CHR(10)##/ RETURN СтатусСмены == 1; // 1- смена открыта, 0 - смена закрыта/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);/##CHR(13)##//##CHR(10)##/',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПорта;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ //ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "OEM");/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ //НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT(КомандыЧека.name,128), "ANSI", "OEM" );/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( LEFT( КомандыЧека.name,128), "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+CHR+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = ПЕРЕКОДИРОВАТЬ( "Рубли", "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+Валюта+CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ } //IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "V";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "O";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "G";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ ОтветОтрезки = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ПЕРЕКОДИРОВАТЬ( ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) ), "ANSI", "CP866");/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если значение GTIN получается меньше 6 байт то дополняет до 6 байт (в нашем случае строка представлено строкой, поэтому дополняем до 12 символов)/##CHR(13)##//##CHR(10)##/ GTINHEX = RIGHT( "000000000000" + GTINHEX, 12);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = STRTRANC( STRTRANC( LEFT( КомандыЧека.name,128), """", "" ), ",", ".");/##CHR(13)##//##CHR(10)##/ НаименованиеТовара = ПЕРЕКОДИРОВАТЬ( НаименованиеТовара, "ANSI", "CP866" );/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПЕРЕКОДИРОВАТЬ( ПОЧТА, "ANSI", "CP866" ) );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##///таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );',0,0,1,0,'30.12.2022 18:01:39') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.2 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,6220.00000000,0,'',0.00000000,'','',0,'D868A5B9-F729-4A01-95E9-EC990A5E448C',0,1,0,'30.12.2022 18:01:39') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.2 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.2 #code 0000000227 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments,inDocuments_Sbor, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, СкладПолучатель, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки, КОЛВОДОКСБОРШК, indexS;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##/СкладПолучатель = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "MRK")/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ИДВНУТРЕННИЙДОК;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ТипДокумента = "";/##CHR(13)##//##CHR(10)##/Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Отправлять_в_ЕГАИС == 0 )/##CHR(13)##//##CHR(10)##/ docType = "Списание";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="MRK") //Проверка маркировки/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///добавим "СборШК" в список возвращаемых документов/##CHR(13)##//##CHR(10)##/КолВоДокСборШК = 0;/##CHR(13)##//##CHR(10)##/IF (docType <> "СборШК" AND !ПУСТО(docType))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //получение завершенных документов "СборШК" с сервера/##CHR(13)##//##CHR(10)##/ inDocuments_Sbor = connector.GetDocuments("СборШК", checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/ КолВоДокСборШК = inDocuments_Sbor.Count;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDocSbor = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDocSbor < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DocumentSbor = inDocuments_Sbor.Item(IndexDocSbor);/##CHR(13)##//##CHR(10)##/ inDocuments.Add(DocumentSbor);/##CHR(13)##//##CHR(10)##/ IndexDocSbor++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/Document = "";/##CHR(13)##//##CHR(10)##/Document_sbor = "";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##///IF (КолВоДок==0 AND КолВоДокСборШК==0)/##CHR(13)##//##CHR(10)##/IF ( КолВоДок==0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document) >= 0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //СборШК/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(9000 + IndexDoc + 1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments_Sbor.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments_Sbor.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments_Sbor.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments_Sbor.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы:"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КолВоДокСборШК > 0 AND Загружаем==false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE(inDocuments_Sbor) <> "U")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments_Sbor.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ //Склады из документа - начало/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = Document.GetField("ИдСклада1СОткуда");/##CHR(13)##//##CHR(10)##/ СкладКуда = Document.GetField("ИдСклада1СКуда");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = "";/##CHR(13)##//##CHR(10)##/ СкладКуда = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА <> "005" )/##CHR(13)##//##CHR(10)##/ СкладДокумента = Document.GetField("ИдСклада1С");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СкладДокумента = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладОткуда) AND TYPE(СкладОткуда)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладОткуда;/##CHR(13)##//##CHR(10)##/ ELSE IF (!ПУСТО(СкладДокумента) AND TYPE(СкладДокумента)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладДокумента; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладКуда) AND TYPE(СкладКуда)<>''L'')/##CHR(13)##//##CHR(10)##/ СкладПолучатель = СкладКуда;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //склады из документа - конец/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ АлкоМарка = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ АлкоМарка = Элемент.GetField("Марка"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоМарка) == "L")/##CHR(13)##//##CHR(10)##/ АлкоМарка = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND !ПУСТО( АлкоМарка ) ) /##CHR(13)##//##CHR(10)##/ АлкоПДФ = АлкоМарка;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК" OR Document.DocumentTypeName == "Инвентаризация") //если сканировали через Сбор Штрихкодов или инвентаризацию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // произведем изменение товара, чтобы данные по нему передались в РМК/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE sprres SET ex_code = ex_code WHERE code = ''" + Товар + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ ); /##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, sklad_d, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + СкладПолучатель + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК++;/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'15.02.2023 17:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) <> "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) == "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( spec.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЦенаСклада = СписокТоваров.ЦенаСклада;/##CHR(13)##//##CHR(10)##/ IF (!_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ AND ЦенаСклада == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.alcotype, 1, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = СписокТоваров.alcotype == 2;/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товара: " + Наименование + " с кодом " + КодТовара + ". Загрузка товаров прервана" );/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "КОДДОКУМЕНТА = " + КОДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "ИДДОКУМЕНТА = " + ИДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "СПИСОКДОКУМЕНТОВ = " + СПИСОКДОКУМЕНТОВ, "отладка" );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "005", "007", "019", "045", "055", "MRK" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ИДДОКУМЕНТА;/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "045" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "003" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС) ) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0 ) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС == 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Списание"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code == "MRK") //Маркировка - приёмка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ //document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ СкладКуда = ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяСкладаОткуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладОткуда + "''");/##CHR(13)##//##CHR(10)##/ ИмяСкладаКуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладКуда + "''");/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаОткуда", ИмяСкладаОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаКуда", ИмяСкладаКуда); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, '''' AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column, (SELECT TOP 1 boxnumber FROM barcodes bc WHERE bc.code = ''" + СписокДокументов.code + "'' AND bc.ic = spec.ic AND bc.spec_ic = spec.identity_column) AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode, boxnumber FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Марки.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //шк коробки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИмяПоляСЦеной) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Спецификация.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes_ex( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоКодВ <> "" AND АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("АлкоПДФ", Алкомарка); //Марка/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'15.02.2023 17:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'15.02.2023 17:25:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'15.02.2023 17:25:33') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.2','ТСД',0.00000000,'',0.00000000,7556.00000000,0,'',0.00000000,'','',0,'05223D80-35FA-451B-BA18-012E02913563',0,1,0,'15.02.2023 17:25:38') #begin #description Профиль ТСД Data Mobile v.2.3 #name Профиль ТСД Data Mobile v.2.3 #code 0000000228 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ //СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.3','ТСД',0.00000000,'',0.00000000,7540.00000000,0,'',0.00000000,'','',0,'2656616B-397B-4BB4-AAF8-589953BAE408',0,1,0,'17.02.2023 11:58:39') #begin #description Профиль ТСД Data Mobile v.2.3 (с созданием новых товаров) #name Профиль ТСД Data Mobile v.2.3 (с созданием новых товаров) #code 0000000229 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, sprnn.ed, (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.nn, sprnn.name, (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, sprnn.f_mark, sprnn.markgroup/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, nnbc.bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Склад ) )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcsklad_cena( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'' )");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС("SELECT dbo.fn_calcclev_cena( ''" + @Товар + "'', '''', ''001'', ''001'' )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##/СОЗДАВАТЬТОВАРЫ = true; //признак необходимости создания товаров, если не нашли в базе при загрузке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если в идентификаторе товара встретили dm то товар был создан на ТСД/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND ATC(КодТовара,"dm") > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СОЗДАНИЕ ТОВАРОВ/##CHR(13)##//##CHR(10)##/ IF ( СОЗДАВАТЬТОВАРЫ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПАПКАДЛЯНОВЫХТОВАРОВ = ЗАПРОС("SELECT identity_column FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND name = ''Справочник''");/##CHR(13)##//##CHR(10)##/ КОДНАЛОГА = ЗАПРОС( "SELECT value FROM param WHERE param = ''kodn''" );/##CHR(13)##//##CHR(10)##/ ЕДИНИЦАИЗМЕРЕНИЯ = "шт";/##CHR(13)##//##CHR(10)##/ КОДГРУППЫРЕСУРСОВ = "";/##CHR(13)##//##CHR(10)##/ МИНИМАЛЬНЫЙОСТАТОК = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬ = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАН = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАНЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ // Добвляем новый товар в нужную папку/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "INSERT INTO sprres ( code, maincode, name, shortname, alcocode, cat, kodn, note, ccgroup, group_, parent,/##CHR(13)##//##CHR(10)##/ ed, min_, lossrealization, lossstore, lossreal_val, lossstore_val )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ '''', dbo.fn_getnextmaincode( ), ''" + Наименование + "'', ''" + Наименование + "'', ''" + АлкоКод + "'', ''001'', ''" + КОДНАЛОГА + "'', ''Товар добавлен при загрузке из ТСД'',/##CHR(13)##//##CHR(10)##/ ''0000000001'', ''" + КОДГРУППЫРЕСУРСОВ + "'', " + ПАПКАДЛЯНОВЫХТОВАРОВ + ", ''" + ЕДИНИЦАИЗМЕРЕНИЯ + "'', " + STR( МИНИМАЛЬНЫЙОСТАТОК, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ''" + ЕСТУБЫЛЬ + "'', ''" + ЕСТУБЫЛЬХРАН + "'', " + STR( ЕСТУБЫЛЬЗНАЧ, 16 ,2 ) + ", " + STR( ЕСТУБЫЛЬХРАНЗНАЧ, 16, 2 ) + " ) " );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE identity_column = " + ИДТовара );/##CHR(13)##//##CHR(10)##/ //запишем штрихкод/##CHR(13)##//##CHR(10)##/ ИДШтрихкода = ЗАПРОС("INSERT INTO sprnnbc (nn, bc)/##CHR(13)##//##CHR(10)##/ VALUES (''" + Товар + "'',''" + ШтрихКод + "'')");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //КОНЕЦ СОЗДАНИЯ ТОВАРОВ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'17.02.2023 11:58:33') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.3 (с созданием новых товаров)','ТСД',0.00000000,'',0.00000000,7541.00000000,0,'',0.00000000,'','',0,'23FA9221-3E38-4541-AEE8-62E2C54B4A77',0,1,0,'17.02.2023 11:58:39') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.3 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.3 #code 0000000230 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments,inDocuments_Sbor, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, СкладПолучатель, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки, КОЛВОДОКСБОРШК, indexS;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##/СкладПолучатель = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "MRK")/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ИДВНУТРЕННИЙДОК;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ТипДокумента = "";/##CHR(13)##//##CHR(10)##/Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Отправлять_в_ЕГАИС == 0 )/##CHR(13)##//##CHR(10)##/ docType = "Списание";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="MRK") //Проверка маркировки/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///добавим "СборШК" в список возвращаемых документов/##CHR(13)##//##CHR(10)##/КолВоДокСборШК = 0;/##CHR(13)##//##CHR(10)##/IF (docType <> "СборШК" AND !ПУСТО(docType))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //получение завершенных документов "СборШК" с сервера/##CHR(13)##//##CHR(10)##/ inDocuments_Sbor = connector.GetDocuments("СборШК", checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/ КолВоДокСборШК = inDocuments_Sbor.Count;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDocSbor = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDocSbor < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DocumentSbor = inDocuments_Sbor.Item(IndexDocSbor);/##CHR(13)##//##CHR(10)##/ inDocuments.Add(DocumentSbor);/##CHR(13)##//##CHR(10)##/ IndexDocSbor++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/Document = "";/##CHR(13)##//##CHR(10)##/Document_sbor = "";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##///IF (КолВоДок==0 AND КолВоДокСборШК==0)/##CHR(13)##//##CHR(10)##/IF ( КолВоДок==0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document) >= 0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //СборШК/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(9000 + IndexDoc + 1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments_Sbor.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments_Sbor.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments_Sbor.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments_Sbor.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы:"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КолВоДокСборШК > 0 AND Загружаем==false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE(inDocuments_Sbor) <> "U")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments_Sbor.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ //Склады из документа - начало/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = Document.GetField("ИдСклада1СОткуда");/##CHR(13)##//##CHR(10)##/ СкладКуда = Document.GetField("ИдСклада1СКуда");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = "";/##CHR(13)##//##CHR(10)##/ СкладКуда = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА <> "005" )/##CHR(13)##//##CHR(10)##/ СкладДокумента = Document.GetField("ИдСклада1С");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СкладДокумента = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладОткуда) AND TYPE(СкладОткуда)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладОткуда;/##CHR(13)##//##CHR(10)##/ ELSE IF (!ПУСТО(СкладДокумента) AND TYPE(СкладДокумента)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладДокумента; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладКуда) AND TYPE(СкладКуда)<>''L'')/##CHR(13)##//##CHR(10)##/ СкладПолучатель = СкладКуда;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //склады из документа - конец/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ АлкоМарка = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ АлкоМарка = Элемент.GetField("Марка"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоМарка) == "L")/##CHR(13)##//##CHR(10)##/ АлкоМарка = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND !ПУСТО( АлкоМарка ) ) /##CHR(13)##//##CHR(10)##/ АлкоПДФ = АлкоМарка;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК" OR Document.DocumentTypeName == "Инвентаризация") //если сканировали через Сбор Штрихкодов или инвентаризацию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // произведем изменение товара, чтобы данные по нему передались в РМК/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE sprres SET ex_code = ex_code WHERE code = ''" + Товар + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ ); /##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, sklad_d, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + СкладПолучатель + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК++;/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'11.05.2023 18:22:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'11.05.2023 18:22:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'11.05.2023 18:22:07') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) <> "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) == "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( spec.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект КоллекцияПродуктов.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЦенаСклада = СписокТоваров.ЦенаСклада;/##CHR(13)##//##CHR(10)##/ IF (!_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ AND ЦенаСклада == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.alcotype, 1, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект ПРОДУКТ.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = СписокТоваров.alcotype == 2;/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект УПАКОВКА.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ERROR ) throw(0);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ //packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( НомерПрерывания )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товара: " + Наименование + " с кодом " + КодТовара + ". Загрузка товаров прервана" );/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Цен (объект rowColPrice).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект rowPrice.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Складов (объект rowColSklad).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать Коллекцию Клиентов (объект rowColClient).");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw(0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект row.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ BREAK;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( НомерПрерывания )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "КОДДОКУМЕНТА = " + КОДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "ИДДОКУМЕНТА = " + ИДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "СПИСОКДОКУМЕНТОВ = " + СПИСОКДОКУМЕНТОВ, "отладка" );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "005", "007", "019", "045", "055", "MRK" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ИДДОКУМЕНТА;/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "045" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "003" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС) ) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0 ) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС == 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Списание"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code == "MRK") //Маркировка - приёмка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ //document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ СкладКуда = ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяСкладаОткуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладОткуда + "''");/##CHR(13)##//##CHR(10)##/ ИмяСкладаКуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладКуда + "''");/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаОткуда", ИмяСкладаОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаКуда", ИмяСкладаКуда); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, /##CHR(13)##//##CHR(10)##/ spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН, spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, /##CHR(13)##//##CHR(10)##/ '''' AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, sprres.a_code, spec.nnname, spec.kolp, spec.nn, spec.cena, sprres.nnvid, dbo.fn_alcotype( sprres.nnvid ) AS alcotype, sprres.d_litr, sprres.a_proc, "+ИсточникАлкоКода+".alcocode, sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, spec.identity_column AS identity_column, (SELECT TOP 1 boxnumber FROM barcodes bc WHERE bc.code = ''" + СписокДокументов.code + "'' AND bc.ic = spec.ic AND bc.spec_ic = spec.identity_column) AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //марки/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode, boxnumber FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Марки.boxnumber; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //шк коробки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИмяПоляСЦеной) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( Спецификация.alcotype, 1, 2 ) AND АлкоДок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ( Спецификация.alcotype == 1, true, false ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Маркировка", ЕСЛИ( Спецификация.alcotype == 1, "Алкоголь", "Пиво" ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("Марка", Алкомарка); //Марка /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("МаркаИСМП", Алкомарка); //Марка /##CHR(13)##//##CHR(10)##/ documentItem.SetField("МаркаСтандарт", Алкомарка); //Марка /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Алкомарка = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Спецификация.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes_ex( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( Спецификация.alcotype, 1, 2 ) AND АлкоДок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ( Спецификация.alcotype == 1, true, false ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Маркировка", ЕСЛИ( Спецификация.alcotype == 1, "Алкоголь", "Пиво" ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##///выгрузка документов/##CHR(13)##//##CHR(10)##/connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'11.05.2023 18:22:07') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.3','ТСД',0.00000000,'',0.00000000,7568.00000000,0,'',0.00000000,'','',0,'1FD631E3-5CC6-4FCF-BA39-2E184E36EBFC',0,1,0,'11.05.2023 18:22:07') #begin #description Весы Штрих (драйвер весового модуля ВМ100) #name Весы Штрих (драйвер весового модуля ВМ100) #code 0000000231 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:25') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.DrvSM", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера AddIn.DrvSM" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.Connect( ) == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ДрайверВесов.Connected )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключится к весам. Проверьте соединение кабеля." );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДрайверВесов.GetChannelStatus( );/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка: " + ДрайверВесов.ResultCodeDescription );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'06.07.2023 13:39:25') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы Штрих (драйвер весового модуля ВМ100)','ВЕСЫБЭ',0.00000000,'Профиль для подключения электронных весов Штрих через драйвер весового модуля ВМ100',0.00000000,122.00000000,0,'',0.00000000,'','',0,'9B99CC0D-4155-4117-AB67-55C1DBD3A4D2',0,1,0,'06.07.2023 13:39:25') #begin #description Весы Штрих (универсальный драйвер электронных весов Штрих) #name Весы Штрих (универсальный драйвер электронных весов Штрих) #code 0000000232 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:25') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера AddIn.Scale45" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/КодОшибки = ДрайверВесов.ResultCode;/##CHR(13)##//##CHR(10)##/ОписаниеОшибки = ДрайверВесов.ResultDescription;/##CHR(13)##//##CHR(10)##/IF ( КодОшибки == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ДрайверВесов.ReadWeight(); /##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ДрайверВесов.ResultDescription;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == 0 )/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДрайверВесов.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодОшибки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка: " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'06.07.2023 13:39:25') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы Штрих (универсальный драйвер электронных весов Штрих)','ВЕСЫБЭ',0.00000000,'Профиль для подключения электронных весов Штрих через универсальный драйвер электронных устройств. Поддержка типов весов: Штрих AC, Штрих AC POS, Штрих POS2',0.00000000,7574.00000000,0,'',0.00000000,'','',0,'F1D3E72E-7191-4AE7-B479-DEA0BF7CFF69',0,1,0,'06.07.2023 13:39:25') #begin #description Весы с ПЭ Mertech серии M-ER 725, 727, 828 (режим ККМ) #name Весы с ПЭ Mertech серии M-ER 725, 727, 828 (режим ККМ) #code 0000000233 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/МассивТоваров = "";/##CHR(13)##//##CHR(10)##/МассивСообщений = "";/##CHR(13)##//##CHR(10)##/СписокТоваров = "";/##CHR(13)##//##CHR(10)##/СписокСообщений = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, /##CHR(13)##//##CHR(10)##/ CASE WHEN (SELECT f_weight FROM spredn WHERE code= sprres.ed) = 1 THEN 0 ELSE 1 END AS ware_type, /##CHR(13)##//##CHR(10)##/ sprres.store_period AS sprres_sp, /##CHR(13)##//##CHR(10)##/ sprres.ed AS sprres_ed, /##CHR(13)##//##CHR(10)##/ (SELECT LEFT( bctemplate, 2 ) FROM spredn WHERE code = sprres.ed ) AS bc_prefix,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.d_litr <> 0 THEN STR(sprres.d_litr, 10, 3)+'' ''+sprres.edd_litr /##CHR(13)##//##CHR(10)##/ WHEN sprres.weight <> 0 THEN STR(sprres.weight, 10, 3)+'' ''+sprres.ed_weight /##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volwgt,/##CHR(13)##//##CHR(10)##/ sprres.weight AS pieceWeight,/##CHR(13)##//##CHR(10)##/ sprgroup.code AS sprres_gr,/##CHR(13)##//##CHR(10)##/ sprres.identity_column AS sprres_id,/##CHR(13)##//##CHR(10)##/ sprres.notavail AS sprres_deleted,/##CHR(13)##//##CHR(10)##/ dbo.fn_getpath_ic( ''S02'', ''0000000001'', spectree.parent, ''\'', 0) AS fullpath_ic,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ФорматЭтикетки'', temp.nn, 0, 0, '''' ) AS label_format";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (ВЫГРУЖАТЬКАРТИНКИТОВАРОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса = ТекстЗапроса + ", (SELECT image_ FROM sprres_image WHERE CONVERT(int,code)= temp.nn) AS tovar_image, sprres.image_path AS _image_path";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса = ТекстЗапроса + ", '''' AS tovar_image, '''' AS _image_path";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ТекстЗапроса = ТекстЗапроса + " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode/##CHR(13)##//##CHR(10)##/INNER JOIN spectree spectree ON spectree.ic = sprres.identity_column AND spectree.code= ''0000000001'' AND spectree.folder = 0/##CHR(13)##//##CHR(10)##/LEFT JOIN sprres_g sprgroup ON sprgroup.code = sprres.group_/##CHR(13)##//##CHR(10)##/WHERE sprgroup.f_nokkm = 0 AND sprgroup.notavail = 0";/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ(ТекстЗапроса);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоВыгруженныхТоваров = 0;/##CHR(13)##//##CHR(10)##/КоличествоВыгруженныхСообщений = 0;/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Выгрузка товаров в Весы");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ //if ( КоличествоСтрок % 10 == 0 ) /##CHR(13)##//##CHR(10)##/ Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) + "" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ОбъемВес = "";/##CHR(13)##//##CHR(10)##/ IF ( ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС )/##CHR(13)##//##CHR(10)##/ ОбъемВес = " " + СЖАТЬПРОБЕЛЫ( СписокТоваров.volwgt );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mID = СписокТоваров.sprres_id; //ид товара/##CHR(13)##//##CHR(10)##/ mCode = СписокТоваров.code; //код товара/##CHR(13)##//##CHR(10)##/ mPluNumber = СписокТоваров.plu; //ПЛУ/##CHR(13)##//##CHR(10)##/ mName = СписокТоваров.name + ОбъемВес; //наименование /##CHR(13)##//##CHR(10)##/ mPrice = ROUND( СписокТоваров.cena, 2 ); //цена/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND СписокТоваров.cena <= 0 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mLabelTemplate = ЕСЛИ( !ПУСТО( СписокТоваров.label_format ), СписокТоваров.label_format, "" ); //Приоритетный шаблон этикетки/##CHR(13)##//##CHR(10)##/ //mBarcodeStructure = ""; //Приоритетная структура штрихкода/##CHR(13)##//##CHR(10)##/ mShelfLifeInDays = СписокТоваров.sprres_sp; //срок годности в днях/##CHR(13)##//##CHR(10)##/ //mtare = 0; //тара/##CHR(13)##//##CHR(10)##/ mPieceWeight = СписокТоваров.pieceWeight; //вес одной штуки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCategory = VAL( СписокТоваров.sprres_gr ); //ид категории/##CHR(13)##//##CHR(10)##/ mProductType = ЕСЛИ( СписокТоваров.ware_type == 1, "PIECE", "WEIGHT" ); //тип товара (весовой или штучный)/##CHR(13)##//##CHR(10)##/ mDeleted = ЕСЛИ( СписокТоваров.sprres_deleted == 1, true, false ); //признак удаления/##CHR(13)##//##CHR(10)##/ mMessageId = СписокТоваров.sprres_id; //ид сообщения/##CHR(13)##//##CHR(10)##/ mNote = STDF( ALLTRIM( СписокТоваров.note ), 1024 ); //комментарий/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШКТовара = IIF( СписокТоваров.ware_type == 0, СписокТоваров.plu, GETWORD("," + СписокТоваров.barcode, ",", 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФорматЭтикетки = СписокТоваров.label_format;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( СписокТоваров.article ), 20 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "ВЫГРУЖАТЬАРТИКУЛВПЛУ", false ) )/##CHR(13)##//##CHR(10)##/ mPluNumber = ПЕРЕКОДИРОВАТЬ( mArticle, "ANSI", "UTF-8" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( mPluNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сформируем структуру объекта для товара/##CHR(13)##//##CHR(10)##/ СтрокаТовара = "";/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "{";/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "" + ДАННЫЕ_JSON( "code", mCode );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mCategory ) )/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "category", mCategory );/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "deleted", mDeleted );/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "id", mID );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mLabelTemplate ) )/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "labelTemplate", mLabelTemplate );/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "manufactureDate", DTOC( ДАТА(), 0, "-") ); /##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "name", ПЕРЕКОДИРОВАТЬ( mName, "ANSI", "UTF-8" ) ); /##CHR(13)##//##CHR(10)##/ СтрокаТовара += ",""pieceWeight"":" + STR( mPieceWeight, 10, 1 ); /##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "pluNumber", mPluNumber ); /##CHR(13)##//##CHR(10)##/ СтрокаТовара += ",""price"":" + STR( mPrice, 10, 1 ); /##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "productType", mProductType );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mShelfLifeInDays ) )/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "shelfLifeInDays", mShelfLifeInDays );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mNote ) )/##CHR(13)##//##CHR(10)##/ СтрокаТовара += "," + ДАННЫЕ_JSON( "message", mMessageId );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТовара += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим объект товара в список товаров/##CHR(13)##//##CHR(10)##/ СписокТоваров += ЕСЛИ( !ПУСТО( СписокТоваров ), ",", "" ) + СтрокаТовара;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не пустой комментарий/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( mNote ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоВыгруженныхСообщений++;/##CHR(13)##//##CHR(10)##/ //сформируем структуру объекта для сообщения /##CHR(13)##//##CHR(10)##/ СтрокаСообщения = "";/##CHR(13)##//##CHR(10)##/ СтрокаСообщения += "{";/##CHR(13)##//##CHR(10)##/ СтрокаСообщения += ДАННЫЕ_JSON( "id", mID );/##CHR(13)##//##CHR(10)##/ СтрокаСообщения += "," + ДАННЫЕ_JSON( "deleted", mDeleted );/##CHR(13)##//##CHR(10)##/ СтрокаСообщения += "," + ДАННЫЕ_JSON( "value", ПЕРЕКОДИРОВАТЬ( mNote, "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ СтрокаСообщения += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим объект сообщения в список сообщений/##CHR(13)##//##CHR(10)##/ СписокСообщений += ЕСЛИ( !ПУСТО( СписокСообщений ), ",", "" ) + СтрокаСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоВыгруженныхТоваров++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассивТоваров = "[" + СписокТоваров + "]";/##CHR(13)##//##CHR(10)##/МассивСообщений = "[" + СписокСообщений + "]";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##///формируем итоговый файл/##CHR(13)##//##CHR(10)##/ВыгружаемыеДанные = "";/##CHR(13)##//##CHR(10)##/ВыгружаемыеДанные += "{";/##CHR(13)##//##CHR(10)##/ ВыгружаемыеДанные += """categories"": " + МассивКатегорий;/##CHR(13)##//##CHR(10)##/ ВыгружаемыеДанные += ",""messages"": " + МассивСообщений;/##CHR(13)##//##CHR(10)##/ ВыгружаемыеДанные += ",""products"": " + МассивТоваров;/##CHR(13)##//##CHR(10)##/ВыгружаемыеДанные += "}";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ВыгружаемыеДанные );/##CHR(13)##//##CHR(10)##///Закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передача файла на устройство/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT name, login, password FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''", "ПараметрыВесов");/##CHR(13)##//##CHR(10)##/НаименованиеВесов = ALLTRIM( ПараметрыВесов.name );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/АдресВесов = ALLTRIM( ПараметрыВесов.login );/##CHR(13)##//##CHR(10)##/IPадрес = ПОЛУЧИТЬСЛОВО( ":" + АдресВесов, ":", 1 );/##CHR(13)##//##CHR(10)##/IPпорт = VAL( ПОЛУЧИТЬСЛОВО( ":" + АдресВесов, ":", 2 ) );/##CHR(13)##//##CHR(10)##///если порт не указан через двоеточие, то используем стандартный/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( IPпорт ) ) IPпорт = 1111;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Пароль = VAL( ПараметрыВесов.password );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ПараметрыВесов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( IPадрес ) OR ПУСТО( IPпорт ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не указан адрес весов или порт в карточке торгового оборудования." + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Передача файла в весы производиться не будет", "Весы Mertech" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //сформируем структуру JSON с заданием для весов/##CHR(13)##//##CHR(10)##/ МассивЗаданий = "";/##CHR(13)##//##CHR(10)##/ МассивЗаданий += "[";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий = ""; /##CHR(13)##//##CHR(10)##/ СписокЗаданий += "{";/##CHR(13)##//##CHR(10)##/ //добавить IP в список/##CHR(13)##//##CHR(10)##/ СписокЗаданий += """command_id"": 79";/##CHR(13)##//##CHR(10)##/ СписокДействий = "";/##CHR(13)##//##CHR(10)##/ СписокДействий += "[";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ip весов/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 1";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 1";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """ + IPадрес + """";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //порт весов/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 2";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 1";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """ + IPпорт + """";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пароль весов/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 3";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 1";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """ + Пароль + """";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //протокол ( 0 - UDP, 1 - TCP )/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 5";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 0";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": ""1""";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "]"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий += ",""command_input_list"": " + СписокДействий;/##CHR(13)##//##CHR(10)##/ СписокЗаданий += ",""command_output_list"": [] ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий += ",{";/##CHR(13)##//##CHR(10)##/ //отправка файла на весы/##CHR(13)##//##CHR(10)##/ СписокЗаданий += """command_id"": 48";/##CHR(13)##//##CHR(10)##/ СписокДействий = "";/##CHR(13)##//##CHR(10)##/ СписокДействий += "[";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //тип файла/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 208";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 0";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": ""10""";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //полное имя файла/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 207";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 2";/##CHR(13)##//##CHR(10)##/ Действие += "," + ДАННЫЕ_JSON("param_value", ALLTRIM( path_out ) );/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //путь к папке на весах/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 210";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 2";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """"";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //содержимое бэкап файла/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 294";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 3";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """"";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //код товара/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 182";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 0";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """"";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //тип экспорта товаров в базу (0 - с предварительной очисткой, 1 - с объединением данных )/##CHR(13)##//##CHR(10)##/ Действие = "";/##CHR(13)##//##CHR(10)##/ Действие += "{";/##CHR(13)##//##CHR(10)##/ Действие += """param_id"": 317";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_type"": 0";/##CHR(13)##//##CHR(10)##/ Действие += ",""param_value"": """ + ЕСЛИ( ПРИЗНАКОЧИСТКИККМ, "0", "1" ) + """";/##CHR(13)##//##CHR(10)##/ Действие += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "," + Действие;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокДействий += "]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий += ",""command_input_list"": " + СписокДействий;/##CHR(13)##//##CHR(10)##/ СписокЗаданий += ",""command_output_list"": [] ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокЗаданий += "}";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ МассивЗаданий += СписокЗаданий;/##CHR(13)##//##CHR(10)##/ МассивЗаданий += "]";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлФлаг = ФайлОткрыть( path_flag_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлФлаг, МассивЗаданий );/##CHR(13)##//##CHR(10)##/ //Закрываем файл/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлФлаг );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ТекстСообщения = "В весы """ + НаименованиеВесов + """ выгружено: " + СимвПС;/##CHR(13)##//##CHR(10)##/ТекстСообщения += "" + КоличествоВыгруженныхКатегорий + " категорий " + СимвПС;/##CHR(13)##//##CHR(10)##/ТекстСообщения += "" + КоличествоВыгруженныхТоваров + " товаров " + СимвПС;/##CHR(13)##//##CHR(10)##/ТекстСообщения += "" + КоличествоВыгруженныхСообщений + " сообщений " + СимвПС;/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( ТекстСообщения, "Весы Mertech" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/СписокКатегорий = "";/##CHR(13)##//##CHR(10)##/МассивКатегорий = "";/##CHR(13)##//##CHR(10)##/КоличествоВыгруженныхКатегорий = 0;/##CHR(13)##//##CHR(10)##///В качестве категорий товаров используем группы ресурсов, т.к. на весах нет многоуровневой иерархии/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT code, ex_code, parent, name, identity_column/##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE f_nokkm = 0 AND notavail = 0/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокПапок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаJSON = "{" + ДАННЫЕ_JSON( "idCategory", СписокПапок.identity_column ) + "," + ПЕРЕКОДИРОВАТЬ( ДАННЫЕ_JSON( "name", СписокПапок.name ), "ANSI", "UTF-8" ) + "}"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СписокКатегорий += ЕСЛИ( !ПУСТО( СписокКатегорий ), ",", "" ) + СтрокаJSON;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоВыгруженныхКатегорий++;/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПапок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МассивКатегорий = "[" + СписокКатегорий + "]";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/ДОБАВЛЯТЬКНАИМЕНОВАНИЮОБЪЕМВЕС = false;/##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬАРТИКУЛВПЛУ = false;/##CHR(13)##//##CHR(10)##/ВЫГРУЖАТЬКАРТИНКИТОВАРОВ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлФлаг = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_flag_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлФлаг = ФайлОткрыть( path_flag_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для формирования задания для весов ''" + ALLTRIM( path_flag_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ФайлФлаг != -1 ) ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/IF ( ФайлФлаг == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Весы ''" + ALLTRIM( name ) + "''. Не удалось создать файл для формирования задания для весов ''" + ALLTRIM( path_flag_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФАЙЛЗАКРЫТЬ( ДескрипторФайла );',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'06.07.2023 13:39:41') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ Mertech серии M-ER 725, 727, 828 (режим ККМ)','ККМ',0.00000000,'',0.00000000,7573.00000000,0,'',0.00000000,'','',0,'57FF139F-00BF-4E8F-8FC4-BEA22C24CB4A',0,1,0,'21.07.2023 9:06:49') #begin #description Обмен данными с кабинетом Дримкас V.4 #name Обмен данными с кабинетом Дримкас V.4 #code 0000000185 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТРАНЗАКЦИЮ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ tranzCount = ИДТранзакции + 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция открытия чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( tranzdate ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + STR( VAL( seller ) ) + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( _kolp, 16, 3 ) + ", ''" + STDF( barcode, 70 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( _summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + kkmsklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ ИДТранзакции++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///заглушка/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( path_in ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = "dreamkas_in_" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + ".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = ПутьКФайлу + ИмяФайлаСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT( path_in, RAT( path_in, "\" ) );/##CHR(13)##//##CHR(10)##/ ИмяФайлаСервера = RIGHT( path_in, LEN( path_in ) - RAT( path_in, "\" ) );/##CHR(13)##//##CHR(10)##/ ИмяФайлаЗагрузки = path_in; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу + "http_log_" + ALLTRIM( КОДОБОРУДОВАНИЯ ) + ".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ФайлЗагрузки = ФайлСоздать( ИмяФайлаЗагрузки );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##///РЕГНОМЕРКАССЫ = ЗАПРОС("SELECT regnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##/РЕГНОМЕРКАССЫ = ЗАПРОС("SELECT ex_code FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( РЕГНОМЕРКАССЫ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/period = "";/##CHR(13)##//##CHR(10)##/device = "";/##CHR(13)##//##CHR(10)##/МОЖНОГРУЗИТЬ = false;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО(ПЕРИОДЗАГРУЗКИ) AND ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ period = "?from=" + LEFT(TTOC( НАЧАЛОПЕРИОДА, 7, "-" ),10) + "T" + ALLTRIM(TTOC( НАЧАЛОПЕРИОДА, 8 ) ) + ".239Z" + "&to=" + /##CHR(13)##//##CHR(10)##/ LEFT( TTOC( КОНЕЦПЕРИОДА, 7, "-" ), 10 ) + "T" + ALLTRIM( TTOC( КОНЕЦПЕРИОДА, 8 ) ) + ".239Z";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДатаПоследнейЗагрузкиДата = LEFT(TTOC( ЗАПРОС("SELECT lastdownload FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''"), 7, "-" ),10);/##CHR(13)##//##CHR(10)##/ ДатаПоследнейЗагрузкиВремя = ALLTRIM(TTOC(ЗАПРОС("SELECT lastdownload FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''"),8));/##CHR(13)##//##CHR(10)##/ ДатаСегодня = LEFT(TTOC( датавремя(), 7, "-" ),10) ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ period = "?from=" + ДатаПоследнейЗагрузкиДата + "T" + ДатаПоследнейЗагрузкиВремя + ".239Z" + "&to=" + ДатаСегодня + "T23:59:59.239Z";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );//"f3b86356-9f12-4201-a373-9d4e8d137d9c";//"f3422466-bc15-4270-87b4-59706081699b";///##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[ 0 ] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/Заголовки[ 1 ] = "Authorization: Bearer " + Ключ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТаблицаПервичныхДанных = "##" + УНИКАЛЬНОЕИМЯ( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ТаблицаПервичныхДанных + "( cheque varchar( max ) )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Стоп = false;/##CHR(13)##//##CHR(10)##/offset = 0;/##CHR(13)##//##CHR(10)##/WHILE ( !Стоп )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ АдресРесурса = "api/receipts" + period +"&offset=" + offset + "&limit=1000"; /##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР )/##CHR(13)##//##CHR(10)##/ АдресРесурса += "&devices=" + РЕГНОМЕРКАССЫ; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ JSONстрока = ПЕРЕКОДИРОВАТЬ( HTTPGET( Соединение, АдресРесурса, "Заголовки" ), "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗагрузки = ФАЙЛОТКРЫТЬ( ИмяФайлаЗагрузки, 1, 1 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ФайлЗагрузки, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлЗагрузки, JSONстрока );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлЗагрузки );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "json", JSONСтрока );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Чеки", json.data, "cheque" );/##CHR(13)##//##CHR(10)##/ // Переносим все первичные данные во временную таблицу/##CHR(13)##//##CHR(10)##/ ВЫГРУЗИТЬ( ТаблицаПервичныхДанных, "", "", "Чеки" );/##CHR(13)##//##CHR(10)##/ Стоп = КОЛИЧЕСТВОСТРОК( "Чеки" ) < 1000;/##CHR(13)##//##CHR(10)##/ offset += КОЛИЧЕСТВОСТРОК( "Чеки" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Запросим информацию о закрытых сменах/##CHR(13)##//##CHR(10)##/АдресРесурса = "api/shifts" + period; //+"&offset=;&limit=";/##CHR(13)##//##CHR(10)##/IF ( ПроверятьКОДФР )/##CHR(13)##//##CHR(10)##/ АдресРесурса += "&devices=" + РЕГНОМЕРКАССЫ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/JSONСмены = ПЕРЕКОДИРОВАТЬ( HTTPGET( Соединение, АдресРесурса, "Заголовки" ), "UTF-8", "ANSI" );/##CHR(13)##//##CHR(10)##/HTTPЗАКРЫТЬ( Соединение );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Чек записывается следующими транзакциями/##CHR(13)##//##CHR(10)##/// 42 - открытие чека/##CHR(13)##//##CHR(10)##/// 11 - продажа/##CHR(13)##//##CHR(10)##/// 43 - оплата/##CHR(13)##//##CHR(10)##/// 55 - закрытие чека/##CHR(13)##//##CHR(10)##/// Нет идентификатора транзакции, поэтому, нумеруем сами/##CHR(13)##//##CHR(10)##/ИДТранзакции = ЗАПРОС( "SELECT MAX( tranzcount ) FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT cheque FROM " + ТаблицаПервичныхДанных, "Данные" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Загрузка чеков", КОЛИЧЕСТВОСТРОК( "Данные" ) );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "Данные" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "Данные" ), "Обработано строк" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Чек", Данные.cheque );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Кассир", Чек.cashier );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzdate = CTOD( Чек.localDate, 7 );/##CHR(13)##//##CHR(10)##/ tranzType = "42";/##CHR(13)##//##CHR(10)##/ posNumber = ЗНАЧЕНИЕПОЛЯ( "Чек", "shopId", 0 );/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ seller = STR( VAL( ЗАПРОС( "SELECT maincode FROM sprempl WHERE ex_code=''" + ЗНАЧЕНИЕПОЛЯ( "Кассир", "id", "" ) + "''" ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ chequeNumber = Чек.number;/##CHR(13)##//##CHR(10)##/ chequeType = ЕСЛИ( Чек.type == "REFUND", 1, 0 );/##CHR(13)##//##CHR(10)##/ ecrSession = Чек.shiftId;/##CHR(13)##//##CHR(10)##/ karta = Чек.id;/##CHR(13)##//##CHR(10)##/ ecrNumber = Чек.deviceId;/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ _kolp = 0.00;/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ _summasale = 0.00;/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ summa = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Запомним ид транзакции, для последующего обновления её полей/##CHR(13)##//##CHR(10)##/ tranzCount42 = tranzCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzType = "11";/##CHR(13)##//##CHR(10)##/ doccode = "008";/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Позиции", Чек.positions, "Позиция" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Позиции" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "СтрокаЧека", Позиции.Позиция );/##CHR(13)##//##CHR(10)##/ nnname = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "name", "Свободная продажа" );/##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС( "SELECT maincode FROM sprres WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MAX( ic ) FROM spectree WHERE CONVERT(varchar( 50 ), uniqueid )= ''" + STDF( СтрокаЧека.id ) + "'')" );/##CHR(13)##//##CHR(10)##/ if ( !ПУСТО( nn ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT s.code AS code, s.cat AS cat, s.name AS name, s.ed AS ed, s.kodn AS kodn, s.weight AS weight, s.d_litr AS d_litr, s.ed_weight AS ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr AS edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm, s.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТОВАРИНФО" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ warecode_org = ТОВАРИНФО.maincode;/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ kkmsklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/ firm = СПИСОКФР.firm;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _kolp = ЕСЛИ(chequeType == 1, -1, 1) * VAL( СтрокаЧека.quantity ) / 1000;/##CHR(13)##//##CHR(10)##/ _price = VAL( СтрокаЧека.price ) / 100;/##CHR(13)##//##CHR(10)##/ _summasale = _kolp * _price;/##CHR(13)##//##CHR(10)##/ _discount = VAL( ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "discount", 0 ) ) / 100;/##CHR(13)##//##CHR(10)##/ summa = _summasale + _discount;/##CHR(13)##//##CHR(10)##/ cena = summa / ЕСЛИ( ROUND( _kolp, 3 ) != 0, _kolp, 1 );/##CHR(13)##//##CHR(10)##/ barcode = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "exciseBarcode", "" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( barcode ) )/##CHR(13)##//##CHR(10)##/ barcode = ЗНАЧЕНИЕПОЛЯ( "СтрокаЧека", "barcode", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Считаем общее количество по чеку (для 55-1 и 42-1 транзакций)/##CHR(13)##//##CHR(10)##/ totalQuantity += _kolp;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Позиции" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Товар нашли/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Позиции" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СтрокаЧека" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запишем оплаты/##CHR(13)##//##CHR(10)##/ tranzType = "43";/##CHR(13)##//##CHR(10)##/ doccode = "";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ firm = "";/##CHR(13)##//##CHR(10)##/ manager = "";/##CHR(13)##//##CHR(10)##/ warecode_org = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##/ _summasale = 0.00;/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ cena = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Оплаты", Чек.payments, "Оплата" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Оплаты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Оплата", Оплаты.Оплата );/##CHR(13)##//##CHR(10)##/ _kolp = VAL( Оплата.amount ) / 100;/##CHR(13)##//##CHR(10)##/ summa = _kolp;/##CHR(13)##//##CHR(10)##/ AspectValue1 = ЕСЛИ( UPPER( ALLTRIM( ЗНАЧЕНИЕПОЛЯ( "Оплата", "type", "" ) ) ) == "CASHLESS", "2", "1" );/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ IF ( AspectValue1 == "2" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ summabn = summa;/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Оплаты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Оплаты" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Оплата" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Транзакция закрытия чека/##CHR(13)##//##CHR(10)##/ tranzType = "55";/##CHR(13)##//##CHR(10)##/ _kolp = totalQuantity;/##CHR(13)##//##CHR(10)##/ summa = ЕСЛИ(chequeType == 1, -1, 1) * VAL( ЗНАЧЕНИЕПОЛЯ( "Чек", "amount", 0 ) ) / 100;/##CHR(13)##//##CHR(10)##/ _summasale = summa;/##CHR(13)##//##CHR(10)##/ AspectValue1 = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summa= ''" + STR( summa, 16, 2 ) + "'', summasale= ''" + STR( summa, 16, 2 ) + "'', kolp = ''" + STR( _kolp, 16, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE id = " + tranzCount42 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Данные" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "Данные" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/doccode = "";/##CHR(13)##//##CHR(10)##/seller = "";/##CHR(13)##//##CHR(10)##/wareMark = "";/##CHR(13)##//##CHR(10)##/chequeNumber = 0;/##CHR(13)##//##CHR(10)##/chequeType = 9;/##CHR(13)##//##CHR(10)##/universalNDOK = "";/##CHR(13)##//##CHR(10)##/nn = "";/##CHR(13)##//##CHR(10)##/s_code = "";/##CHR(13)##//##CHR(10)##/nnname = "";/##CHR(13)##//##CHR(10)##/ed = "";/##CHR(13)##//##CHR(10)##/kodn = "";/##CHR(13)##//##CHR(10)##/client = "";/##CHR(13)##//##CHR(10)##/_kolp = 0.00;/##CHR(13)##//##CHR(10)##/barcode = "";/##CHR(13)##//##CHR(10)##/_summasale = 0.00;/##CHR(13)##//##CHR(10)##/summabn = 0.00;/##CHR(13)##//##CHR(10)##/summa = 0.00;/##CHR(13)##//##CHR(10)##/cena = 0.00;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/manager = "";/##CHR(13)##//##CHR(10)##/warecode_org = "";/##CHR(13)##//##CHR(10)##/AspectValue1 = "";/##CHR(13)##//##CHR(10)##/totalQuantity = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь необходимо запросить информацию о закрытиях смен/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЗИТЬJSON( "Смены", JSONСмены, "Смена" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Смены" ) AND ТИП( "Смены.Смена" ) == "C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬJSON( "Смена", Смены.Смена );/##CHR(13)##//##CHR(10)##/ // Если смена закрыта/##CHR(13)##//##CHR(10)##/ IF ( UPPER( ALLTRIM( ЗНАЧЕНИЕПОЛЯ( "Смена", "isClosed", false ) ) ) == "TRUE" OR ЗНАЧЕНИЕПОЛЯ( "Смена", "isClosed", false ) == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzdate = CTOD( ЗНАЧЕНИЕПОЛЯ( "Смена", "closedAt", {} ), 7 );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( tranzdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( tranzdate ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzType = "63";/##CHR(13)##//##CHR(10)##/ posNumber = ЗНАЧЕНИЕПОЛЯ( "Смена", "shopId", 0 );/##CHR(13)##//##CHR(10)##/ ecrSession = Смена.shiftId;/##CHR(13)##//##CHR(10)##/ karta = Смена.id;/##CHR(13)##//##CHR(10)##/ ecrNumber = Смена.deviceId; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM frontol__tranzt WHERE equipment= ''" + КОДОБОРУДОВАНИЯ + "'' AND infostr= ''" + STDF( karta ) + "''" );/##CHR(13)##//##CHR(10)##/ ЗАПИСАТЬТРАНЗАКЦИЮ( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Смены" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Смены" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',203.00000000,'//Полная выгрузка товаров в ККМ./##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Отступ( НОМЕР )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN REPLICATE( CHR( 9 ), НОМЕР );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗАПИСАТЬТЭГ( Отступ, TAG, Значение, Разделитель, istext )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN """" + TAG + """" + ":" + ЕСЛИ(istext, """" + Значение + """", Значение) + Разделитель;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Преобразование текста к допустимому в XML виду/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ XMLTRANS( ТЕКСТ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "<", "<" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ">", ">" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ",", "." );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, ";", "." );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, """", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "/", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, "\", " " );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(34),"" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(39),"" );/##CHR(13)##//##CHR(10)##/ ТЕКСТ = STRTRAN( ТЕКСТ, CHR(44),"" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN ТЕКСТ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/IF (ПУСТО(path_out))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = ВРЕМЕННЫЙКАТАЛОГ();/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = "dreamkas_out_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = ПутьКФайлу+ИмяФайлаДляСервера;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПутьКФайлу = LEFT(path_out, RAT(path_out, "\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляСервера = RIGHT(path_out, LEN(path_out)-RAT(path_out,"\"));/##CHR(13)##//##CHR(10)##/ ИмяФайлаОтправки = path_out;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайлаДляУдаления = "dreamkas_delete_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##/ ФайлУдаления = ПутьКФайлу+ИмяФайлаДляУдаления;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = ПутьКФайлу+"http_log_"+ALLTRIM(КОДОБОРУДОВАНИЯ)+".txt";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/ФайлЖурнала = ФайлСоздать( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/IF ( ФайлЖурнала == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл журнала ''" + ALLTRIM( ИмяФайлаЖурнала );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Ключ = ЗАПРОС("SELECT serialnumber FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС("SELECT name FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ИМЯСКЛАДА = ЗАПРОС("SELECT name FROM sprskl WHERE code =(select sklad from sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "'')");/##CHR(13)##//##CHR(10)##/ИдУстройств = ЗАПРОС("SELECT REGNUMBER FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/// Создаем новый файл/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = -1;/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления != -1 ) ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = ФайлСоздать( ФайлУдаления );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ФайлУдаления ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "[";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 0 ) + "[");/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "[";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоТоваровНовые = 0;/##CHR(13)##//##CHR(10)##/КоличествоТоваровУдаляемые = 0;/##CHR(13)##//##CHR(10)##/КоличествоЭлементов = ЗАПРОС("SELECT count(code) FROM " + ТОВАРЫ);/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[0] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[1] = "NDS_10"; //НДС 10%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[2] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[3] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[4] = "NDS_18"; //НДС 18%/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[5] = "NDS_NO_TAX"; //Без НДС/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕНАЛОГОВ[6] = "NDS_0"; //НДС 0%/##CHR(13)##//##CHR(10)##///СписокДопустимыхЕдиниц = "шт,кг,л,м,км,м2,м3,компл,упак,ед,дроб";/##CHR(13)##//##CHR(10)##/СписокВесовыхЕдиниц = "кг,г,т";/##CHR(13)##//##CHR(10)##/СписокДробныхЕдиниц = "кг,г,т,дкл,л,мл";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/_ЕСТЬТИПМАРКИРОВКИ = VAL( ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END") );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT DISTINCT temp.code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getbarcodes_ex( spr.code ) AS barcodes, /##CHR(13)##//##CHR(10)##/ temp.name, /##CHR(13)##//##CHR(10)##/ temp.cname, /##CHR(13)##//##CHR(10)##/ temp.cena, /##CHR(13)##//##CHR(10)##/ temp.kolp, /##CHR(13)##//##CHR(10)##/ temp.kodn, /##CHR(13)##//##CHR(10)##/ temp.article, /##CHR(13)##//##CHR(10)##/ temp.waretype, /##CHR(13)##//##CHR(10)##/ temp.fractqty,/##CHR(13)##//##CHR(10)##/ CASE WHEN spr.d_litr <> 0 THEN STR( spr.d_litr, 10, 3 ) + '' '' + spr.edd_litr /##CHR(13)##//##CHR(10)##/ WHEN spr.weight <> 0 THEN STR( spr.weight, 10, 3 ) + '' '' + spr.ed_weight/##CHR(13)##//##CHR(10)##/ ELSE '''' END AS volweight,/##CHR(13)##//##CHR(10)##/ spr.nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( spr.nnvid ) AS alcotype, /##CHR(13)##//##CHR(10)##/ spr.d_litr, /##CHR(13)##//##CHR(10)##/ spr.a_proc, /##CHR(13)##//##CHR(10)##/ dbo.fn_getalcocodes(spr.code) as alcocodes, /##CHR(13)##//##CHR(10)##/ spr.ed AS ed, /##CHR(13)##//##CHR(10)##/ tree.uniqueid AS uniqueid,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "spr.f_mark", "0") + " AS f_mark, " + ЕСЛИ(_ЕСТЬТИПМАРКИРОВКИ==1, "spr.markgroup", "0") + " AS markgroup, /##CHR(13)##//##CHR(10)##/ edn.ex_code AS unit,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS rsubject/##CHR(13)##//##CHR(10)##/ FROM " + Товары + " temp /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres spr ON spr.maincode = temp.code/##CHR(13)##//##CHR(10)##/ INNER JOIN spectree tree ON tree.ic = spr.identity_column AND tree.objtype = ''SPR'' AND (tree.objcode = ''S02'' OR tree.objcode = ''S05'')/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn edn ON edn.code = spr.ed/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON spr.group_ = sprres_g.code","СписокТоваров");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) + "" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (!ТОВАРЫБЕЗЦЕНЫ AND VAL(СписокТоваров.cena) == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ uuid = СписокТоваров.uniqueid;/##CHR(13)##//##CHR(10)##/ //ЗАПРОС("SELECT uniqueid FROM spectree WHERE ic = (SELECT identity_column FROM sprnn WHERE nn = ''" + nn + "'') AND objtype = ''SPR'' AND (objcode = ''S02'' OR objcode = ''S05'')"); /##CHR(13)##//##CHR(10)##/ IF (uuid == "")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ //запишем файлы если количество элементов равно 100/##CHR(13)##//##CHR(10)##/ //1. файл с удаляемыми товарами ???/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровУдаляемые == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "]";/##CHR(13)##//##CHR(10)##/ //запрос на удаление товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайлаУдаления, ПЕРЕКОДИРОВАТЬ(СтрокаТоваровУдаление, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайлаУдаления, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляУдаления = ФАЙЛПРОЧИТАТЬ( ДескрипторФайлаУдаления, "S", ФАЙЛРАЗМЕР( ДескрипторФайлаУдаления ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресКабинета = "https://kabinet.dreamkas.ru";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( АдресКабинета, 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"DELETE", АдресРесурса, ДанныеДляУдаления,"Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоТоваровУдаляемые = 0;/##CHR(13)##//##CHR(10)##/ //Создадим новую строку для товаров/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "[";/##CHR(13)##//##CHR(10)##/ // Если файл с товарами уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления != -1 ) ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайлаУдаления = ФайлСоздать( ФайлУдаления );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайлаУдаления == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ФайлУдаления ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //2. файл с добавляемыми товарами/##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровНовые == 100)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "]"; //закрывающая квадратная скобка строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //запрос на создание товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в кабинет Дримкас");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"PATCH", АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ //ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ Соединение = false;/##CHR(13)##//##CHR(10)##/ КоличествоТоваровНовые = 0;/##CHR(13)##//##CHR(10)##/ //Создадим новую строку для товаров/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = "";/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + "[";/##CHR(13)##//##CHR(10)##/ // Если файл с товарами уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( ИмяФайлаОтправки ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code ); //код/##CHR(13)##//##CHR(10)##/ barCodes[0] = ALLTRIM( СписокТоваров.barcodes ); //массив штрихкодов/##CHR(13)##//##CHR(10)##/ mName = XMLTRANS( СписокТоваров.name ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( СписокТоваров.volweight ) );/##CHR(13)##//##CHR(10)##/ // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/ mCname = XMLTRANS( СписокТоваров.cname ) + ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, "", " " + ALLTRIM( СписокТоваров.volweight ) );/##CHR(13)##//##CHR(10)##/ // Пивную продукцию теперь не выгружаем как алкоголь/##CHR(13)##//##CHR(10)##/ //ПивнаяПродукция = VAL( СписокТоваров.nnvid ) >= 500 OR ВСПИСКЕ( VAL( СписокТоваров.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ //mAlco = VAL( СписокТоваров.nnvid ) > 0 AND !ПивнаяПродукция;/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = СписокТоваров.d_litr;/##CHR(13)##//##CHR(10)##/ mAProc = СписокТоваров.a_proc;/##CHR(13)##//##CHR(10)##/ alcoCodes[0] = СписокТоваров.alcocodes; //массив алкокодов/##CHR(13)##//##CHR(10)##/ mEdn = СписокТоваров.ed;/##CHR(13)##//##CHR(10)##/ ТоварМаркированный = false;/##CHR(13)##//##CHR(10)##/ ТоварПодакцизный = VAL(СписокТоваров.rsubject) == 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ price = ALLTRIM( STR( 100*СписокТоваров.cena, 8, 0 )); //цена продажи/##CHR(13)##//##CHR(10)##/ //mKolp = ALLTRIM( STR( СписокТоваров.kolp, 10, 3 )); //остаток/##CHR(13)##//##CHR(10)##/ costPrice = 0; //закупочная цена/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _Scalable = false;/##CHR(13)##//##CHR(10)##/ _Fractional = false;/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.waretype == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _Scalable = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.fractqty == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _Fractional = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не используем очистку ККМ/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоТоваровУдаляемые++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоТоваровНовые++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tax = ЕСЛИ( f_nalogs, СООТВЕТСТВИЕНАЛОГОВ[VAL( СписокТоваров.kodn )], "NDS_NO_TAX"); //налоги/##CHR(13)##//##CHR(10)##/ articleNumber = XMLTRANS( СписокТоваров.article ); //артикул/##CHR(13)##//##CHR(10)##/ _type = ЕСЛИ(ПивнаяПродукция,"ALCOHOL", ЕСЛИ(mAlco,"ALCOHOL",ЕСЛИ(_Scalable,"SCALABLE","COUNTABLE"))); //тип товара/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(СписокТоваров.f_mark) AND СписокТоваров.f_mark <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТоварМаркированный = true;/##CHR(13)##//##CHR(10)##/ ТипМаркировки = СписокТоваров.markgroup;/##CHR(13)##//##CHR(10)##/ IF ( VAL( ТипМаркировки ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ _type = "TOBACCO";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипМаркировки ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ _type = "SHOES";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипМаркировки ) == 9998 ) //одежда/##CHR(13)##//##CHR(10)##/ _type = "CLOTHES";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( ТипМаркировки ) == 9993 ) //молочная продукция/##CHR(13)##//##CHR(10)##/ _type = "MILK";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ alcoholByVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",ALLTRIM( STR( mAProc*10, 5, 3 ))) ; //крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ alcoholProductKindCode = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"",mNNVid); //код вида алкогольной продукции ФСРАР/##CHR(13)##//##CHR(10)##/ tareVolume = ЕСЛИ(!ПивнаяПродукция AND !mAlco,"", ALLTRIM( STR( mVolume*1000, 6, 3 ))); //ёмкость тары алкогольной продукции в литрах/##CHR(13)##//##CHR(10)##/ quantity = ЕСЛИ( _Fractional, 1, 1000);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоличествоТоваровНовые > 1) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ",";/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление += ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "{"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "{");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление += "{"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //тэги/##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление += ЗАПИСАТЬТЭГ(2,"id",uuid,"",true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"id",uuid,",",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"name",mName,",",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"type",_type,",",true);/##CHR(13)##//##CHR(10)##/ IF ( ТоварМаркированный )/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"isMarked", "true",",",false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТоварПодакцизный )/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"isExcise", "true",",",false);/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"isExcise", "false",",",false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"departmentId",0,",",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"quantity",quantity,",",false);//мерность/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокТоваров.unit ) )/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"unit", ЕСЛИ( ВСПИСКЕ( СписокТоваров.unit, ''796'', ''166'' ), СписокТоваров.unit, 796 ), ",",true);//код единицы по ОКЕИ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО( ИдУстройств ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"prices","[{","",false);/##CHR(13)##//##CHR(10)##/ РазделительИД = ",";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ УстройствоИД = ПОЛУЧИТЬСЛОВО( РазделительИД + ИдУстройств, РазделительИД, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( УстройствоИД ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (НомерСлова > 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров = СтрокаТоваров + ",{";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"deviceId",УстройствоИД,",",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"value",price,"",false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "}";/##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ УстройствоИД = ПОЛУЧИТЬСЛОВО( РазделительИД + ИдУстройств, РазделительИД, НомерСлова );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"price",price,",",false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"meta","{","",false);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(alcoCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"codes","["""+STRTRAN(alcoCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"code",mCode,"", true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (mAlco OR ПивнаяПродукция)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholProductKindCode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"typeCode",alcoholProductKindCode,"",true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(tareVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (mEdn=="л")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tareVolume = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"volume",tareVolume,"",false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!EMPTY(alcoholByVolume))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ((RIGHT(СтрокаТоваров,1)<> "{") AND (RIGHT(СтрокаТоваров,1)<> ","))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ",";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"alc",alcoholByVolume*10,"",false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "},";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(barCodes[0]))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"barcodes","["""+STRTRAN(barCodes[0],",",""",""")+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "],"; //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 3 ) + "],");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(articleNumber))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"vendorCodes","["""+articleNumber+"""","", false);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "],";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтрокаТоваров += ЗАПИСАТЬТЭГ(2,"tax",tax,"",true);/##CHR(13)##//##CHR(10)##/ СтрокаТоваров += "}";//ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла,Отступ( 1 ) + "}");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление += "}";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СтрокаТоваров = СтрокаТоваров + "]";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИККМ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаТоваровУдаление = СтрокаТоваровУдаление + "]";/##CHR(13)##//##CHR(10)##/ //запрос на удаление товаров/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайлаУдаления, ПЕРЕКОДИРОВАТЬ(СтрокаТоваровУдаление, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайлаУдаления, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляУдаления = ФАЙЛПРОЧИТАТЬ( ДескрипторФайлаУдаления, "S", ФАЙЛРАЗМЕР( ДескрипторФайлаУдаления ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайлаУдаления );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресКабинета = "https://kabinet.dreamkas.ru";/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( АдресКабинета, 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"DELETE", АдресРесурса, ДанныеДляУдаления,"Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ //**/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!ПУСТО(СтрокаТоваров) AND СтрокаТоваров <> "]")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //запрос на создание товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, ПЕРЕКОДИРОВАТЬ(СтрокаТоваров, "ANSI", "UTF-8"));/##CHR(13)##//##CHR(10)##/ Заголовки[0] = "Content-Type:application/json";/##CHR(13)##//##CHR(10)##/ Заголовки[1] = "Authorization: Bearer "+Ключ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АдресРесурса = "/api/v2/products";/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( ДескрипторФайла, 0 );/##CHR(13)##//##CHR(10)##/ ДанныеДляОтправки = ФАЙЛПРОЧИТАТЬ( ДескрипторФайла, "S", ФАЙЛРАЗМЕР( ДескрипторФайла ));/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ СИСТЕМНОЕСООБЩЕНИЕ("Отправка товаров в кабинет Дримкас");/##CHR(13)##//##CHR(10)##/ Соединение = HTTPCONNECT( "https://kabinet.dreamkas.ru", 443, true, ИмяФайлаЖурнала);/##CHR(13)##//##CHR(10)##/ IF ( Соединение == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось установить соединение с кабинетом Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,true);/##CHR(13)##//##CHR(10)##/ Ответ = HTTPPOST(Соединение, АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ = HTTPOTHER(Соединение,"PATCH", АдресРесурса, ДанныеДляОтправки, "Заголовки");/##CHR(13)##//##CHR(10)##/ IF (Ответ == false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + "''. Не удалось передать данные в кабинет Дримкас''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Ответ1 = ПЕРЕКОДИРОВАТЬ(Ответ,"UTF-8", "ANSI");/##CHR(13)##//##CHR(10)##/ //HTTPHEADERS(Соединение,false);/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ //ФАЙЛУДАЛИТЬ( ИмяФайлаОтправки );/##CHR(13)##//##CHR(10)##/ HTTPЗАКРЫТЬ(Соединение);/##CHR(13)##//##CHR(10)##/ Соединение = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлЖурнала );/##CHR(13)##//##CHR(10)##/ФайлЖурнала = -1;/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Заголовки[0] = "";/##CHR(13)##//##CHR(10)##/Заголовки[1] = "";/##CHR(13)##//##CHR(10)##/Заголовки[2] = "";/##CHR(13)##//##CHR(10)##/Заголовки[3] = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##///_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,1,0,'06.07.2023 13:39:57') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с кабинетом Дримкас V.4','ККМ',0.00000000,'Обмен данными с кабинетом Дримкас через REST.API.',0.00000000,4730.00000000,0,'',0.00000000,'','',0,'39038CB1-C235-4611-9501-C02838443104',0,1,0,'06.07.2023 13:39:57') #begin #description Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол CAS) #name Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол CAS) #code 0000000234 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/Public ПортВесов;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПортВесов = ЗАПРОС("SELECT port_n FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'12.07.2023 22:17:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "Cas_AD_AP.Scale", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера Cas_AD_AP.Scale" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Connect(ПортВесов, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключится к весам. Проверьте соединение." );/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WAIT(3000); //ждем 3 секунды после соединения/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///пытаемся получить вес/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.UpdateOnlyWeight( );/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка получения веса с весов" );/##CHR(13)##//##CHR(10)##/ //отключаемся/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Disconnect();/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///отключаемся от весов/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДрайверВесов.Disconnect();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'12.07.2023 22:17:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол CAS)','ВЕСЫБЭ',0.00000000,'Профиль для подключения электронных весов Mertech серии M-ER 221, 222, 224, 326, 328 по протоколу CAS через драйвер электронных весов CAS (Cas_AD_AP.Scale)',0.00000000,7577.00000000,0,'',0.00000000,'','',0,'A06A8674-F67F-4DD7-A423-675D2A6CB7A4',0,1,0,'21.07.2023 9:06:41') #begin #description Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол POS2) #name Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол POS2) #code 0000000235 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'12.07.2023 22:17:05') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось создать объект драйвера AddIn.Scale45" );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/КодОшибки = ДрайверВесов.ResultCode;/##CHR(13)##//##CHR(10)##/ОписаниеОшибки = ДрайверВесов.ResultDescription;/##CHR(13)##//##CHR(10)##/IF ( КодОшибки == 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодОшибки = ДрайверВесов.ReadWeight(); /##CHR(13)##//##CHR(10)##/ ОписаниеОшибки = ДрайверВесов.ResultDescription;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == 0 )/##CHR(13)##//##CHR(10)##/ Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДрайверВесов.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( КодОшибки != 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка: " + ОписаниеОшибки );/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'12.07.2023 22:17:05') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы электронные Mertech серии M-ER 221, 222, 224, 326, 328 (протокол POS2)','ВЕСЫБЭ',0.00000000,'Профиль для подключения электронных весов Mertech серии M-ER 221, 222, 224, 326, 328 по протоколу POS2 через универсальный драйвер весов Штрих',0.00000000,7576.00000000,0,'',0.00000000,'','',0,'68A0F512-091E-4902-BC45-F6C7AEE763D4',0,1,0,'21.07.2023 9:06:41') #begin #description Профиль ТСД Data Mobile v.2.4 #name Профиль ТСД Data Mobile v.2.4 #code 0000000236 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.rest;/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.price; /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.rest;/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.price; /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ //СТРОКА = ПЕРЕКОДИРОВАТЬ( ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) ), "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.4','ТСД',0.00000000,'',0.00000000,7582.00000000,0,'',0.00000000,'','',0,'AFA3B8B7-0D21-494E-9498-31AAF8F84468',0,1,0,'28.07.2023 15:55:33') #begin #description Профиль ТСД Data Mobile v.2.4 (с созданием новых товаров) #name Профиль ТСД Data Mobile v.2.4 (с созданием новых товаров) #code 0000000237 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_РАБОТАСЕГАИС = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 1, 3 );/##CHR(13)##//##CHR(10)##/_РАБОТАСМАРКИРОВКОЙ = ВСПИСКЕ( ПЕРЕМЕННАЯ( "ИНДЕКСУСТРОЙСТВА", 0 ), 2, 3 );/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАВЫГРУЗКИ = _ПАПКАВЫГРУЗКИ + ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( TTOC( ДАТАВРЕМЯ( ), 4 ), ".", "" ), ":", "" ), " ", "" ) + "_v83";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАТОВАРОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Arts.dm";/##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАШК = _ИМЯФАЙЛАВЫГРУЗКИ + "_BarCodes.dm";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ФАЙЛТОВАРОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАТОВАРОВ );/##CHR(13)##//##CHR(10)##/_ФАЙЛШК = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЕГАИС = _ИМЯФАЙЛАВЫГРУЗКИ + "_ArtsEGAIS.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛЕГАИС = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАЕГАИС ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Users.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛПОЛЬЗОВАТЕЛЕЙ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАСКЛАДОВ = _ИМЯФАЙЛАВЫГРУЗКИ + "_Warehouses.dm";/##CHR(13)##//##CHR(10)##/ _ФАЙЛСКЛАДОВ = ФАЙЛСОЗДАТЬ( _ИМЯФАЙЛАСКЛАДОВ );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛТОВАРОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЕГАИС, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬ( _ФАЙЛШК, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛСКЛАДОВ, CHR( 0xef ) + CHR( 0xbb ) + CHR( 0xbf ) ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАПОЛЬЗОВАТЕЛИ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАПОЛЬЗОВАТЕЛИ = _ФАЙЛПОЛЬЗОВАТЕЛЕЙ < 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ОШИБКАСКЛАДЫ = false;/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ _ОШИБКАСКЛАДЫ = _ФАЙЛСКЛАДОВ < 0; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКАЕГАИС = false;/##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ _ОШИБКАЕГАИС = _ФАЙЛЕГАИС < 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ОШИБКА = _ФАЙЛТОВАРОВ < 0 OR _ФАЙЛШК < 0 OR _ОШИБКАЕГАИС OR _ОШИБКАПОЛЬЗОВАТЕЛИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ОШИБКА ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛТОВАРОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛЕГАИС >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛСКЛАДОВ >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ФАЙЛШК >= 0 ) ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД= false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION /##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + ЕСЛИ(_РАБОТАСЕГАИС, " AND sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0 AND spec.ic = " + ИДДОКУМЕНТА, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА + "/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ (SELECT name FROM sprmanuf WHERE code = sprnn.manuf_code) AS nnmanuf, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM(sprnn.weight) + '' '' + sprnn.ed_weight) AS nnweight, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(_РАБОТАСЕГАИС, " WHERE sprnn.nnvid = 0 ", ""), "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.nn, /##CHR(13)##//##CHR(10)##/ sprnn.name, /##CHR(13)##//##CHR(10)##/ (SELECT shortname FROM sprclient WHERE code = sprnn.importer) AS importer, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ (SELECT RTRIM( code ) + '' '' + name FROM sprnnvid WHERE code = sprnn.nnvid ) AS nnvid, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode,/##CHR(13)##//##CHR(10)##/ (SELECT CASE WHEN EXISTS(SELECT * FROM sprres_egais egais WHERE egais.code = sprnn.nn) THEN 1 ELSE 0 END) AS associated, /##CHR(13)##//##CHR(10)##/ sprnn.f_mark, /##CHR(13)##//##CHR(10)##/ sprnn.markgroup,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬЦЕНЫ, "0", ЕСЛИ( !ПУСТО( Склад ), /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )", /##CHR(13)##//##CHR(10)##/ "dbo.fn_calcclev_cena( sprnn.nn, '''', ''001'', ''001'' )" ) ) + " AS price,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( !_ВЫГРУЖАТЬОСТАТКИ, "0", "dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS rest/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE sprnn.nnvid <> 0", "СписокТоваровЕГАИС" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, /##CHR(13)##//##CHR(10)##/ sprnn.ed, /##CHR(13)##//##CHR(10)##/ nnbc.bc, /##CHR(13)##//##CHR(10)##/ spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 0/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnnbc nnbc ON nnbc.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ UNION/##CHR(13)##//##CHR(10)##/ SELECT sprnn.maincode, sprnn.ed, '''' AS bc, spredn.f_weight/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ INNER JOIN spredn ON spredn.code = sprnn.ed AND spredn.f_weight = 1", "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) + 2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) + 1) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем режим добавления/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем количество строк/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( "Единица;Производитель;Объем;Вес;;;;;;;", "ANSI", "UTF-8" ) );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваров" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваров" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваров" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnmanuf, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = ЗАМЕНИТЬ( STR( СписокТоваров.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Вес = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.nnweight, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0;/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак, 9993 - молочная продукция,/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.markgroup == "0005", 1, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "1520", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9997", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9998", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9996", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.markgroup == "9993", 5, 0 ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.rest;/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.price; /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИспользоватьСН = "0";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛТОВАРОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваров" ) + 1 ) + ";+;" + КодТовара + ";" + Наименование + ";" + Цена + ";" + Единица + ";" + Производитель + ";" + Объем + ";" +/##CHR(13)##//##CHR(10)##/ Вес + ";;;;;;;" + Остаток + ";" + ИспользоватьСН + ";;;;" + mMarkGroup, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛТОВАРОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_РАБОТАСЕГАИС)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка товаров ЕГАИС", КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) );/##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров ЕГАИС и записываем их в файл/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваровЕГАИС" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокТоваровЕГАИС" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваровЕГАИС.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Производитель = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.importer, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ВидПродукции = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.nnvid, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Объем = STR( СписокТоваровЕГАИС.d_litr, 10, 2 ); //ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.d_litr, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Крепость = ЗАМЕНИТЬ( STR( СписокТоваровЕГАИС.a_proc, 10, 2 ), ".", "," );/##CHR(13)##//##CHR(10)##/ Алкокод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваровЕГАИС.alcocode, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Остаток = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //ВЫБРАТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.rest;/##CHR(13)##//##CHR(10)##/ //Остаток = ЗАМЕНИТЬ( STR( Остаток, 16, 3 ), ".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = СписокТоваров.price; /##CHR(13)##//##CHR(10)##/ //Цена = ЗАМЕНИТЬ( STR( Цена, 16, 3 ),".", "," );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Сопоставлен = СписокТоваровЕГАИС.associated;/##CHR(13)##//##CHR(10)##/ КоличествоВКоробке = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиА = "0";/##CHR(13)##//##CHR(10)##/ ВводСправкиБ = "0";/##CHR(13)##//##CHR(10)##/ ВводДатыРозлива = "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛЕГАИС, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокТоваровЕГАИС" ) + 1 ) + ";+;" + Наименование + ";" + КодТовара + ";" + Алкокод + ";" + Производитель + ";" + Производитель + ";" + Объем + ";" + Крепость + ";" + /##CHR(13)##//##CHR(10)##/ ВидПродукции + ";" + Сопоставлен + ";" + КоличествоВКоробке + ";" + ВводСправкиА + ";" + ВводСправкиБ + ";" + ВводДатыРозлива + ";", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваровЕГАИС" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЕГАИС );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка штриховых кодов", КОЛИЧЕСТВОСТРОК( "СписокШК" ) );/##CHR(13)##//##CHR(10)##/// Проходим по списку товаров и записываем их в файл/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокШК" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СписокШК" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СписокШК" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СписокШК" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СписокШК" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокШК.maincode;/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.bc, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ Единица = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокШК.ed, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" ), ";", "" );/##CHR(13)##//##CHR(10)##/ ПризнакВесового = VAL(СписокШК.f_weight);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛШК, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СписокШК" ) + 1 ) + ";+;" + ЕСЛИ(ПУСТО(ШтрихКод), ПРАВСИМВ("00000" + alltrim(КодТовара),5), ШтрихКод) + ";" + Единица + ";1;" + КодТовара + ";0", "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШК" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокШК" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( _ФАЙЛШК );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, profile, pwd, ex_code/##CHR(13)##//##CHR(10)##/ FROM sprempl WHERE f_loadkkm = 1 AND notavail = 0", "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка пользователей", КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникПользователей") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникПользователей" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникПользователей" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникПользователей" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникПользователей" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИмяПользователя = СправочникПользователей.name;/##CHR(13)##//##CHR(10)##/ ШтрихкодПользователя = СправочникПользователей.ex_code;/##CHR(13)##//##CHR(10)##/ Пароль = СправочникПользователей.pwd;/##CHR(13)##//##CHR(10)##/ ПраваАдмина = ЕСЛИ( VAL(СправочникПользователей.profile) == 30, "1", "0");/##CHR(13)##//##CHR(10)##/ ПраваСозданияТоваров = ПраваАдмина;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникПользователей" ) + 1 ) + ";+;" + ИмяПользователя + ";" + ШтрихкодПользователя + ";" + Пароль + ";" + ПраваАдмина + ";" + ПраваСозданияТоваров, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛПОЛЬЗОВАТЕЛЕЙ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬСКЛАДЫ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name/##CHR(13)##//##CHR(10)##/ FROM sprskl WHERE notavail = 0", "СправочникСкладов"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Выгрузка складов", КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) + 1 ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ЕСЛИ( ПРИЗНАКОЧИСТКИТСД, "-", "+" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СправочникСкладов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "СправочникСкладов" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "СправочникСкладов" ), "Выгружено " + STR( НОМЕРСТРОКИ( "СправочникСкладов" ) ) + " из " + STR( КОЛИЧЕСТВОСТРОК( "СправочникСкладов" ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СправочникСкладов.code;/##CHR(13)##//##CHR(10)##/ НаименованиеСклада = СправочникСкладов.name; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( _ФАЙЛСКЛАДОВ, ПЕРЕКОДИРОВАТЬ( STR( НОМЕРСТРОКИ( "СправочникСкладов" ) + 1 ) + ";+;" + КодСклада + ";" + НаименованиеСклада, "ANSI", "UTF-8") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СправочникСкладов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛСКЛАДОВ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/IF ( ИНДЕКСУСТРОЙСТВА == 1 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС"; /##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 2 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE IF ( ИНДЕКСУСТРОЙСТВА == 3 )/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile с ЕГАИС и Маркировкой";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИМЯУСТРОЙСТВА = "Data Mobile";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##/СОЗДАВАТЬТОВАРЫ = true; //признак необходимости создания товаров, если не нашли в базе при загрузке/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАЗАГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАЗАГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАЗАГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАЗАГРУЗКИ + "OUT", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ += "OUT\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАЗАГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИ( _ПАПКАЗАГРУЗКИ + "*.dmU" );/##CHR(13)##//##CHR(10)##/_ИМЯANSIФАЙЛА = _ПАПКАЗАГРУЗКИ + УНИКАЛЬНОЕИМЯ( ) + ".txt";/##CHR(13)##//##CHR(10)##/ИДДОКУМЕНТА = 1;/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ПУСТО( _ИМЯФАЙЛАЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Необходимо перенести данные из файла в таблицу с данными/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛОТКРЫТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ ДАННЫЕИЗФАЙЛА = ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "B", ФАЙЛРАЗМЕР( _ФАЙЛЗАГРУЗКИ ) );/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ДАННЫЕИЗФАЙЛА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = ПЕРЕКОДИРОВАТЬ( ДАННЫЕИЗФАЙЛА , "UTF-16", "ANSI" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СТРОКА = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СТРОКА = ДАННЫЕИЗФАЙЛА;/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Записываем перекодированную строку в новый файл/##CHR(13)##//##CHR(10)##/ _ФАЙЛЗАГРУЗКИ = ФАЙЛСОЗДАТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( _ФАЙЛЗАГРУЗКИ, СТРОКА );/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( _ФАЙЛЗАГРУЗКИ, 0 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Пропускаем первую строку - это пустые заголовки/##CHR(13)##//##CHR(10)##/ ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КОЛИЧЕСТВОСТРОКВФАЙЛЕ = ФАЙЛКОЛИЧЕСТВОСТРОК( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА = 0;/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( "Загрузка файла " + _ИМЯФАЙЛАЗАГРУЗКИ, КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ WHILE ( !ФАЙЛКОНЕЦФАЙЛА( _ФАЙЛЗАГРУЗКИ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НОМЕРСТРОКИФАЙЛА++;/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИФАЙЛА % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИФАЙЛА, "Загружено " + НОМЕРСТРОКИФАЙЛА + " из " + КОЛИЧЕСТВОСТРОКВФАЙЛЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СТРОКА = ";" + ФАЙЛПРОЧИТАТЬ( _ФАЙЛЗАГРУЗКИ, "S" );/##CHR(13)##//##CHR(10)##/ КодТовара = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 2 ), """", "" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 3 ), """", "" );/##CHR(13)##//##CHR(10)##/ Количество = VAL( ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 6 ), """", "" ) );/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 9 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоПДФ = ЗАМЕНИТЬ( ПОЛУЧИТЬСЛОВО( СТРОКА, ";",";", 11 ), """", "" );/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ АлкоКод = ЕГАИС.АлкоКодИзМарки( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT TOP 1 code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //определим весовой товар по коду/##CHR(13)##//##CHR(10)##/ IF ( LEN( ШтрихКод ) < 13 AND ATC( ШтрихКод, КодТовара ) > 0 )/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //определим товар сперва по коду/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres WHERE maincode= ''" + STDF( КодТовара ) + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" )/##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" )/##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( VAL( КодТовараИзШК ) ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Наименование ) )/##CHR(13)##//##CHR(10)##/ Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если в идентификаторе товара встретили dm то товар был создан на ТСД/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND ATC(КодТовара,"dm") > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СОЗДАНИЕ ТОВАРОВ/##CHR(13)##//##CHR(10)##/ IF ( СОЗДАВАТЬТОВАРЫ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПАПКАДЛЯНОВЫХТОВАРОВ = ЗАПРОС("SELECT identity_column FROM spectree WHERE objtype = ''SPR'' AND objcode = ''S02'' AND folder = 1 AND name = ''Справочник''");/##CHR(13)##//##CHR(10)##/ КОДНАЛОГА = ЗАПРОС( "SELECT value FROM param WHERE param = ''kodn''" );/##CHR(13)##//##CHR(10)##/ ЕДИНИЦАИЗМЕРЕНИЯ = "шт";/##CHR(13)##//##CHR(10)##/ КОДГРУППЫРЕСУРСОВ = "";/##CHR(13)##//##CHR(10)##/ МИНИМАЛЬНЫЙОСТАТОК = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬ = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАН = "";/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ ЕСТУБЫЛЬХРАНЗНАЧ = 0;/##CHR(13)##//##CHR(10)##/ // Добвляем новый товар в нужную папку/##CHR(13)##//##CHR(10)##/ ИДТовара = ЗАПРОС( "INSERT INTO sprres ( code, maincode, name, shortname, alcocode, cat, kodn, note, ccgroup, group_, parent,/##CHR(13)##//##CHR(10)##/ ed, min_, lossrealization, lossstore, lossreal_val, lossstore_val )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ '''', dbo.fn_getnextmaincode( ), ''" + Наименование + "'', ''" + Наименование + "'', ''" + АлкоКод + "'', ''001'', ''" + КОДНАЛОГА + "'', ''Товар добавлен при загрузке из ТСД'',/##CHR(13)##//##CHR(10)##/ ''0000000001'', ''" + КОДГРУППЫРЕСУРСОВ + "'', " + ПАПКАДЛЯНОВЫХТОВАРОВ + ", ''" + ЕДИНИЦАИЗМЕРЕНИЯ + "'', " + STR( МИНИМАЛЬНЫЙОСТАТОК, 16, 2 ) + ",/##CHR(13)##//##CHR(10)##/ ''" + ЕСТУБЫЛЬ + "'', ''" + ЕСТУБЫЛЬХРАН + "'', " + STR( ЕСТУБЫЛЬЗНАЧ, 16 ,2 ) + ", " + STR( ЕСТУБЫЛЬХРАНЗНАЧ, 16, 2 ) + " ) " );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE identity_column = " + ИДТовара );/##CHR(13)##//##CHR(10)##/ //запишем штрихкод/##CHR(13)##//##CHR(10)##/ ИДШтрихкода = ЗАПРОС("INSERT INTO sprnnbc (nn, bc)/##CHR(13)##//##CHR(10)##/ VALUES (''" + Товар + "'',''" + ШтрихКод + "'')");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //КОНЕЦ СОЗДАНИЯ ТОВАРОВ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДДОКУМЕНТА + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( Цена * Количество, 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( _ФАЙЛЗАГРУЗКИ );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( _ИМЯANSIФАЙЛА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛПЕРЕИМЕНОВАТЬ( _ИМЯФАЙЛАЗАГРУЗКИ, _ИМЯФАЙЛАЗАГРУЗКИ + STRTRAN( STRTRAN( STRTRAN( TTOC( ДАТАВРЕМЯ( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ _ИМЯФАЙЛАЗАГРУЗКИ = ФАЙЛНАЙТИСЛЕДУЮЩИЙ( );/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКОНЧИТЬПОИСК( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 4;',0,0,1,0,'28.07.2023 15:54:47') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД Data Mobile v.2.4 (с созданием новых товаров)','ТСД',0.00000000,'',0.00000000,7583.00000000,0,'',0.00000000,'','',0,'27143522-4DDE-43D0-8832-F5D268BC29BB',0,1,0,'28.07.2023 15:55:33') #begin #description Весы электронные АТОЛ (драйвер Атол V8) #name Весы электронные АТОЛ (драйвер Атол V8) #code 0000000179 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',30.00000000,'//Инициализация ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/PUBLIC ДрайверВесов, КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстСообщения = "Не удалось создать объект драйвера AddIn.Scale45";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ THROW ТекстСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch( ТекстСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ТекстСообщения, "Весы электронные Драйвер АТОЛ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',35.00000000,'//Имя устройства ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстСообщения = "Не удалось создать объект драйвера AddIn.Scale45";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ THROW ТекстСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch( ТекстСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ТекстСообщения, "Весы электронные Драйвер АТОЛ");/##CHR(13)##//##CHR(10)##/ RETURN "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов.CurrentDeviceIndex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/ИмяУстройства = ДрайверВесов.CurrentDeviceName;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ИмяУстройства; ',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',36.00000000,'//Количество устройств ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстСообщения = "Не удалось создать объект драйвера AddIn.Scale45";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ THROW ТекстСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch( ТекстСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ТекстСообщения, "Весы электронные Драйвер АТОЛ");/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоУстройств = ДрайверВесов.DeviceCount;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN КоличествоУстройств; ',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',37.00000000,'//Свойства драйвера ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстСообщения = "Не удалось создать объект драйвера AddIn.Scale45";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ THROW ТекстСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch( ТекстСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ТекстСообщения, "Весы электронные Драйвер АТОЛ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов.ShowProperties();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',32.00000000,'//Текст ошибки драйвера ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ RETURN "Не удалось загрузить драйвер весов";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ДрайверВесов.ResultDescription;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',33.00000000,'//Признак наличия ошибки драйвера ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN ДрайверВесов.ResultCode <> 0;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',34.00000000,'//Окончание работы с ВЕСАМИ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ДрайверВесов = false;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',31.00000000,'//Получить вес из ВЕСОВ БЕЗ ПЭ/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ALLTRIM( ЗАПРОС("SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''") );/##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ ДрайверВесов = СОЗДАТЬОБЪЕКТ( "AddIn.Scale45", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТИП( "ДрайверВесов" ) <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстСообщения = "Не удалось создать объект драйвера AddIn.Scale45";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ THROW ТекстСообщения;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch( ТекстСообщения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( ТекстСообщения, ИМЯОБОРУДОВАНИЯ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерУстройства = VAL( ЗАПРОС("SELECT devicenumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''") );/##CHR(13)##//##CHR(10)##/ДрайверВесов.CurrentDeviceNumber = ЕСЛИ( НомерУстройства == 0, 1, НомерУстройства );/##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = true;/##CHR(13)##//##CHR(10)##/// После этого возможен доступ к свойствам и методам/##CHR(13)##//##CHR(10)##/// Подключаемся к весам/##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось подключить весы " + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Код ошибки: " + ДрайверВесов.ResultCode + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + ДрайверВесов.ResultDescription, ИМЯОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ ДрайверВесов = false;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов.ReadWeight( );/##CHR(13)##//##CHR(10)##/IF ( ДрайверВесов.ResultCode <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Не удалось получить вес с весов" + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "Код ошибки: " + ДрайверВесов.ResultCode + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + ДрайверВесов.ResultDescription, ИМЯОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Вес = ДрайверВесов.Weight;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДрайверВесов.DeviceEnabled = false;/##CHR(13)##//##CHR(10)##/ДрайверВесов = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN Вес;',0,0,1,0,'28.07.2023 15:55:13') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы электронные АТОЛ (драйвер Атол V8)','ВЕСЫБЭ',0.00000000,'',0.00000000,6293.00000000,0,'',0.00000000,'','',0,'E0E5D27B-6B70-4CAB-85D5-B516EAB605DD',0,1,0,'28.07.2023 15:55:13') #begin #description Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.5 #name Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.5 #code 0000000238 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'PUBLIC connector;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/БлочнаяВыгрузка = true; //выгрузка блоками по 500 товаров/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/ИмяПК = "127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт = "10501";/##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/ДописыватьВесОбъем = 1;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Создаем экземпляр объекта соединения/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выполняем подключение к базе Mobile SMARTS/##CHR(13)##//##CHR(10)##/ //connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ //IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ // Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ // _ERROR = true;/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СообщениеОбОшибке = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СКЛАД = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ИМЯТАБЛИЦЫ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, temp.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM " + _ИМЯТАБЛИЦЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON temp.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) <> "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec" + КОДДОКУМЕНТА + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( КОДДОКУМЕНТА ) AND ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ALLTRIM( КОДДОКУМЕНТА ) == "MRK" )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, spec.ed, spec.nn, spec.name, spec.cena, dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем,/##CHR(13)##//##CHR(10)##/ sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес, sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, '''' AS Производитель, spr.vendorname AS ПроизводительИмя, spr.vendorinn AS ПроизводительИНН,/##CHR(13)##//##CHR(10)##/ spr.vendorkpp AS ПроизводительКПП, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( spec.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ELSE IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode, sprnn.ed, sprnn.nn, sprnn.name, spec.cena, dbo.fn_getbarcodes_ex( sprnn.nn ) AS barcodes, sprnn.code AS Артикул, sprnn.nnvid AS ВидАлкоголя, dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, sprnn.d_litr AS Объем, sprnn.edd_litr AS ЕдиницаОбъема, sprnn.weight AS Вес,/##CHR(13)##//##CHR(10)##/ sprnn.a_proc AS Крепость, sprnn.alcocode AS Алкокод, sprnn.importer AS Производитель, sprclient.shortname AS ПроизводительИмя, sprclient.inn AS ПроизводительИНН, sprclient.kpp AS ПроизводительКПП, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )") + " AS Остаток, " + ЕСЛИ(ПУСТО(СКЛАД),"0","dbo.fn_calcsklad_cena( sprnn.nn, '''', ''" + СКЛАД + "'', ''001'' )") + " AS ЦенаСклада/##CHR(13)##//##CHR(10)##/ FROM spec000 spec/##CHR(13)##//##CHR(10)##/ INNER JOIN " + СПИСОКДОКУМЕНТОВ + " temp ON temp.code = spec.code AND temp.ic = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprclient sprclient ON sprclient.code = sprnn.importer", "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/try/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //начать передачу данных по продуктам/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ anyway = true;/##CHR(13)##//##CHR(10)##/ overwriteExisting = ПРИЗНАКОЧИСТКИТСД;/##CHR(13)##//##CHR(10)##/ generateFullTextSearch = true;/##CHR(13)##//##CHR(10)##/ connector.BeginUploadProducts(anyway, overwriteExisting, generateFullTextSearch);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("КоллекцияПродуктов") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать объект КоллекцияПродуктов.";/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Проходим по списку товаров и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ КоличествоТоваровОбщее = КОЛИЧЕСТВОСТРОК("СписокТоваров");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка товаров в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0;/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Выгрузка товаров в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЦенаСклада = СписокТоваров.ЦенаСклада;/##CHR(13)##//##CHR(10)##/ IF (!_ВЫГРУЖАТЬТОВАРЫБЕЗЦЕНЫ AND ЦенаСклада == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 товаров/##CHR(13)##//##CHR(10)##/ IF (indexT >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 товаров/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов = СоздатьОбъект("Cleverence.Warehouse.ProductCollection",1);/##CHR(13)##//##CHR(10)##/ indexT=0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = false;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = "";/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Наименование = ЗАМЕНИТЬ( ЗАМЕНИТЬ( ЗАМЕНИТЬ( СписокТоваров.name, """", "" ), CHR( 13 ), "" ), CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/ ШтрихКоды = ЗАМЕНИТЬ( СписокТоваров.barcodes, ",", "|" );/##CHR(13)##//##CHR(10)##/ Артикул = СписокТоваров.Артикул;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ЛицензияНаПродажу = "лицензия на продажу алкоголя";/##CHR(13)##//##CHR(10)##/ АлкоКодВ = СписокТоваров.ВидАлкоголя;/##CHR(13)##//##CHR(10)##/ АлкоНаимВ = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = СписокТоваров.Объем;/##CHR(13)##//##CHR(10)##/ Вес = СписокТоваров.Вес;/##CHR(13)##//##CHR(10)##/ ЕдиницаОбъема = СписокТоваров.ЕдиницаОбъема;/##CHR(13)##//##CHR(10)##/ Крепость = СписокТоваров.Крепость;/##CHR(13)##//##CHR(10)##/ Алкокод = СписокТоваров.Алкокод;/##CHR(13)##//##CHR(10)##/ Производитель = СписокТоваров.Производитель;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= СписокТоваров.ПроизводительИмя;/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= СписокТоваров.ПроизводительИНН;/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= СписокТоваров.ПроизводительКПП;/##CHR(13)##//##CHR(10)##/ ЕдиницаИзмерения= ЕСЛИ(СписокТоваров.ed == "кг", "кг", "шт");/##CHR(13)##//##CHR(10)##/ Весовой = ЕдиницаИзмерения == "кг";/##CHR(13)##//##CHR(10)##/ Остаток = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Остаток = СписокТоваров.Остаток; //ЗАПРОС( "SELECT dbo.fn_calcsklad( ''" + @Товар + "'', '''', ''" + Склад + "'', ''001'', '''' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.alcotype, 1, 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАлкоголь = true;/##CHR(13)##//##CHR(10)##/ Наименование = ALLTRIM(Наименование) + " " + ALLTRIM(STR(Объем, 10, 2)) + "" + ALLTRIM(ЕдиницаОбъема);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание продукта и заполнение его свойств/##CHR(13)##//##CHR(10)##/ product = СоздатьОбъект("Cleverence.Warehouse.Product",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("product") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать объект Product";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ product.Id = КодТовара; //uuid элемента справочника/##CHR(13)##//##CHR(10)##/ product.Name = Наименование; //Наименование/##CHR(13)##//##CHR(10)##/ product.Marking = Артикул; //Артикул/##CHR(13)##//##CHR(10)##/ product.SetField("withserial", false); //Используются серии/##CHR(13)##//##CHR(10)##/ product.SetField("Весовой", Весовой); //Признак весового товара /##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ product.SetField("Алко", true); //Является алкоголесодержащей продукцией (bool) /##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = СписокТоваров.alcotype == 2;/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоМарк", ЕСЛИ(ПивнаяПродукция,false,true)); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоВидЛиц", ЛицензияНаПродажу); //Вид лицензии/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("АлкоНаимВ", АлкоНаимВ); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ product.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ product.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Создание упаковки для продукта и заполнение ее свойств/##CHR(13)##//##CHR(10)##/ packing = СоздатьОбъект("Cleverence.Warehouse.Packing",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("packing") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать объект Packing";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ packing.Id = КодТовара;/##CHR(13)##//##CHR(10)##/ packing.UnitsQuantity = 1; //Коэффициент (кратность) единицы измерения/##CHR(13)##//##CHR(10)##/ packing.Barcode = ШтрихКоды; //Штрихкод/##CHR(13)##//##CHR(10)##/ packing.Name = ЕдиницаИзмерения; //Наименование единицы измерения/##CHR(13)##//##CHR(10)##/ packing.SelfVolume = Объем; //Собственный объем упаковки./##CHR(13)##//##CHR(10)##/ packing.SelfWeight = Вес; //Собственный вес упаковки./##CHR(13)##//##CHR(10)##/ packing.SetField("price", STR(Цена,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ packing.SetField("qty", STR(Остаток,15,3)); //Количество/##CHR(13)##//##CHR(10)##/ IF (ЭтоАлкоголь == true) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ packing.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ //packing.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавление упаковки к продукту/##CHR(13)##//##CHR(10)##/ product.Packings.Add(packing); ///##CHR(13)##//##CHR(10)##/ // Задание базовой упаковки товара/##CHR(13)##//##CHR(10)##/ product.BasePackingId = packing.Id; //Является базовой единицей/##CHR(13)##//##CHR(10)##/ КоллекцияПродуктов.Add(product);/##CHR(13)##//##CHR(10)##/ indexT++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КоллекцияПродуктов.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если остались невыгруженные товары, их нужно выгрузить/##CHR(13)##//##CHR(10)##/ connector.UploadProducts(КоллекцияПродуктов);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ connector.EndUploadProducts( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/catch ( СообщениеОбОшибке )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки товара: " + Наименование + " с кодом " + КодТовара + "." + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + СообщениеОбОшибке + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Выгрузка прервана", "MobileSmarts" );/##CHR(13)##//##CHR(10)##/ // При выгрузке возникла ошибка, обрабатываем исключение и сбрасываем начавшуюся выгрузку./##CHR(13)##//##CHR(10)##/ connector.ResetUploadProducts();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка таблицы цен/##CHR(13)##//##CHR(10)##/ТаблицаЦен = connector.GetTableAccessor("Цены");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаЦен") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаЦен"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ indexPrice=0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы ЦЕН/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать коллекцию для таблицы цен";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Заполнение таблицы цен в ТСД",КоличествоТоваровОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоТоваров = 0; /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоТоваров++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТоваров % 10 == 0 ) Индикатор( КоличествоТоваров, " Заполнение таблицы цен в ТСД ( " + КоличествоТоваров + " из " + КоличествоТоваровОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexPrice >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ rowColPrice = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexPrice = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.maincode;/##CHR(13)##//##CHR(10)##/ Цена = ЦенаСклада; //СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ IF (Цена > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // создание строки таблицы цен/##CHR(13)##//##CHR(10)##/ rowPrice = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowPrice") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать объект rowPrice.";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦены","Розничная цена");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ИдНоменклатуры",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Характеристика","");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Упаковка",КодТовара);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Цена",Цена);/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("Валюта","руб.");/##CHR(13)##//##CHR(10)##/ rowPrice.SetField("ВидЦеныВнутр",1);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColPrice.Add(rowPrice);/##CHR(13)##//##CHR(10)##/ IndexPrice++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColPrice.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.Upload(rowColPrice);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( СообщениеОбОшибке )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаЦен.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки цен товаров" + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + СообщениеОбОшибке + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Выгрузка прервана", "MobileSmarts" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка складов/##CHR(13)##//##CHR(10)##///КоллекцияСкладов = СоздатьОбъект("Cleverence.Warehouse.WarehouseCollection",1);/##CHR(13)##//##CHR(10)##/ТаблицаСкладов = connector.GetTableAccessor("Склады");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаСкладов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаСкладов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColSklad") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать Коллекцию Складов (объект rowColSklad).";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name FROM sprskl WHERE notavail = 0","СписокСкладов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ КоличествоСкладовОбщее = КОЛИЧЕСТВОСТРОК("СписокСкладов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка складов в ТСД",КоличествоСкладовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоСкладов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокСкладов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСкладов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоСкладов % 10 == 0 ) Индикатор( КоличествоСкладов, " Выгрузка складов в ТСД ( " + КоличествоСкладов + " из " + КоличествоСкладовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexSklad >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ rowColSklad = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexSklad = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодСклада = СписокСкладов.code;/##CHR(13)##//##CHR(10)##/ ИмяСклада = СписокСкладов.name;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Создание склада и заполнение его свойств/##CHR(13)##//##CHR(10)##/ //warehouse = СоздатьОбъект("Cleverence.Warehouse.Warehouse",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //warehouse.id = КодСклада;/##CHR(13)##//##CHR(10)##/ //warehouse.name = ИмяСклада;/##CHR(13)##//##CHR(10)##/ //КоллекцияСкладов.Add(warehouse);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось добавить строку в коллекцию складов";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяСклада);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодСклада);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColSklad.Add(row);/##CHR(13)##//##CHR(10)##/ IndexSklad++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокСкладов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //connector.SetWarehouses(КоллекцияСкладов);/##CHR(13)##//##CHR(10)##/ IF (rowColSklad.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.Upload(rowColSklad);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( СообщениеОбОшибке )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаСкладов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки складов " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + СообщениеОбОшибке + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Выгрузка складов прервана", "MobileSmarts" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка контрагентов/##CHR(13)##//##CHR(10)##/ТаблицаКонтрагентов = connector.GetTableAccessor("Контрагенты");/##CHR(13)##//##CHR(10)##/IF ( TYPE("ТаблицаКонтрагентов") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось получить дополнительную таблицу ""ТаблицаКонтрагентов"".");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( _ERROR ) RETURN false;/##CHR(13)##//##CHR(10)##/IF (!_ERROR)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку складов и передаем их COM объекту/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.BeginUpload(true);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание коллекции строк таблицы/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("rowColClient") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось создать Коллекцию Клиентов (объект rowColClient).";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, shortname, inn FROM sprclient WHERE notavail = 0","СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентовОбщее = КОЛИЧЕСТВОСТРОК("СписокКонтрагентов");/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР("Выгрузка контрагентов в ТСД",КоличествоКонтрагентовОбщее);/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов = 0;/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКонтрагентов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоКонтрагентов++;/##CHR(13)##//##CHR(10)##/ IF ( КоличествоКонтрагентов % 10 == 0 ) Индикатор( КоличествоКонтрагентов, " Выгрузка контрагентов в ТСД ( " + КоличествоКонтрагентов + " из " + КоличествоКонтрагентовОбщее + " )" );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ IF (БлочнаяВыгрузка)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгружаем блоками по 500 элементов/##CHR(13)##//##CHR(10)##/ IF (IndexClient >= 500)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка блока из 500 элементов/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ rowColClient = СоздатьОбъект("Cleverence.Warehouse.RowCollection",1);/##CHR(13)##//##CHR(10)##/ IndexClient = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КодКонтрагента = СписокКонтрагентов.code;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагента = СписокКонтрагентов.name;/##CHR(13)##//##CHR(10)##/ ИмяКонтрагентаПоиск = СписокКонтрагентов.shortname;/##CHR(13)##//##CHR(10)##/ ИННКонтрагента = СписокКонтрагентов.inn;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // создание строки таблицы/##CHR(13)##//##CHR(10)##/ row = СоздатьОбъект("Cleverence.Warehouse.Row",1);/##CHR(13)##//##CHR(10)##/ IF ( TYPE("row") <> "O" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ СообщениеОбОшибке = "Не удалось добавить контрагента в коллекцию";/##CHR(13)##//##CHR(10)##/ throw( СообщениеОбОшибке );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ row.SetField("Код",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("Наименование",ИмяКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("НаименованиеДляПоиска",ИмяКонтрагентаПоиск);/##CHR(13)##//##CHR(10)##/ row.SetField("ИНН",ИННКонтрагента);/##CHR(13)##//##CHR(10)##/ row.SetField("ЭтоПапка",false);/##CHR(13)##//##CHR(10)##/ row.SetField("Ид",КодКонтрагента);/##CHR(13)##//##CHR(10)##/ //добавление строки в коллекцию/##CHR(13)##//##CHR(10)##/ rowColClient.Add(row);/##CHR(13)##//##CHR(10)##/ IndexClient++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКонтрагентов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //Если есть строки для выгрузки, выгружаем/##CHR(13)##//##CHR(10)##/ IF (rowColClient.Count > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выгрузка коллекции строк/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.Upload(rowColClient);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.EndUpload();/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch( СообщениеОбОшибке )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТаблицаКонтрагентов.ResetUpload(); //Если возникла ошибка, сбрасываем выгрузку/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки контрагентов" + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + СообщениеОбОшибке + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Выгрузка контрагентов прервана", "MobileSmarts" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///сбрасываем индикатор/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка документов/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬДОКУМЕНТ AND ( !ПУСТО( КОДДОКУМЕНТА ) OR !ПУСТО( СПИСОКДОКУМЕНТОВ ) ) ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "КОДДОКУМЕНТА = " + КОДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "ИДДОКУМЕНТА = " + ИДДОКУМЕНТА + СимвПС + /##CHR(13)##//##CHR(10)##/ "СПИСОКДОКУМЕНТОВ = " + СПИСОКДОКУМЕНТОВ, "отладка" );/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //try/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //создание коллекции документов для выгрузки/##CHR(13)##//##CHR(10)##/ outDocuments = СоздатьОбъект("Cleverence.Warehouse.DocumentCollection",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT dbase, code, ic FROM " + СПИСОКДОКУМЕНТОВ, "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DB_NAME( ) AS dbase, ''" + КОДДОКУМЕНТА + "'' AS code, " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов", 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем приходную накладную в "Приход на склад" и расходную накладную в "Подбор заказа"/##CHR(13)##//##CHR(10)##/ //инвентаризацию в "Инвентаризация"/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "005", "007", "019", "045", "055", "MRK" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоДок = false;/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = "";/##CHR(13)##//##CHR(10)##/ document = СоздатьОбъект("Cleverence.Warehouse.Document",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ИДДОКУМЕНТА;/##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM mark_in WHERE identity_column= " + ИДДОКУМЕНТА );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДок = ЗАПРОС( "SELECT identity_column FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic ); /##CHR(13)##//##CHR(10)##/ Номер = ЗАПРОС( "SELECT ndok FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Датадок = ЗАПРОС( "SELECT date FROM spr000 WHERE code= ''" + СписокДокументов.code + "'' AND ic= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИмяДок = 0;/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "";/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002", "003", "045" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокДокументов.code, "001", "002" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT ttntype FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr" + СписокДокументов.code + " WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code == "003" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //определим тип документа в MobileSmarts по типу документа в Айтида/##CHR(13)##//##CHR(10)##/ IF ( СписокДокументов.code =="001" AND ПУСТО(ИдЕГАИС)) //если поле "ЕГАИС ИД" не заполнено, то документ считается обычным поступлением/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="001" AND !ПУСТО(ИдЕГАИС) ) //если поле "ЕГАИС ИД" заполнено, то документ считается загруженным из ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокДокументов.code =="002" AND ТипДокумента == 1 AND Отправлять_в_ЕГАИС > 0 ) //выгружаем только расходные накладные со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС > 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="003" AND ТипДокумента == 0 AND Отправлять_в_ЕГАИС == 0) //выгружаем только списания со статусом отличным от статуса "Не отправлять в ЕГАИС"/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Списание"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Переоценка";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Инвентаризация";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Перемещение";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Возврат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (СписокДокументов.code == "MRK") //Маркировка - приёмка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяДок = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\ определили тип документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ИмяДок == 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НаименованиеДокумента = ИмяДок;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПолноеИмяДок = НаименованиеДокумента + " №" + Номер + " от " + Датадок + ЕСЛИ(!ПУСТО(ИдЕГАИС),"("+ИдЕГАИС+")","");/##CHR(13)##//##CHR(10)##/ document.Id = ИДДок; //Уникальный идентификатор документа/##CHR(13)##//##CHR(10)##/ document.Name = ПолноеИмяДок; //Название документа/##CHR(13)##//##CHR(10)##/ //document.Appointment = "Общая"; //Назначение документа - код пользователя или имя группы, которым данный документ назначается на исполнение/##CHR(13)##//##CHR(10)##/ document.CreateDate = Датадок; //Дата создания документа/##CHR(13)##//##CHR(10)##/ document.DocumentTypeName = ИмяДок; //Должно соответствовать одному из доступных пользователю типов документов/##CHR(13)##//##CHR(10)##/ document.InProcess = 0; //Признак того, что документ захвачен пользователем на обработку/##CHR(13)##//##CHR(10)##/ document.Finished = 0; //Признак того, что обработка документа пользователем была завершена, и его можно забирать назад в учетную систему/##CHR(13)##//##CHR(10)##/ document.Modified = 0; //Признак того, что документ был изменен/##CHR(13)##//##CHR(10)##/ //Склад = VAL(ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ document.WarehouseId = 1;//Склад; //Идентификатор склада, к которому привязан документ/##CHR(13)##//##CHR(10)##/ document.Description = НаименованиеДокумента + ЕСЛИ(!ПУСТО(ИдЕГАИС),"Номер ТТН ЕГАИс: "+ИдЕГАИС+"","");//Описание документа/##CHR(13)##//##CHR(10)##/ document.Priority = 1; //Приоритет документа. Более приоритетные документы раньше отдаются на терминал для обработки/##CHR(13)##//##CHR(10)##/ //document.Barcode = ""; //Штрихкод документа/##CHR(13)##//##CHR(10)##/ document.DistributeByBarcode = 0; //Признак выдачи документа по штрихкоду. Документы с таким признаком не поступают на мобильный терминал автоматически, /##CHR(13)##//##CHR(10)##/ //а могут быть выбраны с сервера только по штрихкоду. /##CHR(13)##//##CHR(10)##/ //Свойство может успешно применяться только при наличии постоянной связи с сервером/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольКолва",ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_контроль_количества'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic ));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Контроль количества по заявке. /##CHR(13)##//##CHR(10)##/ //1 – контролируется, в документ нельзя принимать товары, которых нет в заявке, а также нельзя превышать количество товара, который в заявке есть/##CHR(13)##//##CHR(10)##/ //0 – без контроля./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (АлкоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ document.SetField("КонтрольМарок", true); //необходимость проверки старых марок, выгруженных в план документа /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = "";/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code <> "MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СерверныйДокумент = ЗАПРОС( "SELECT dbo.fn_getfloat_ex(''DOC'',''"+СписокДокументов.code+"'',''MS_серверный_документ'',0,identity_column,0,'''') FROM spr"+СписокДокументов.code+" WHERE identity_column = " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СерверныйДокумент)) document.ServerHosted = СерверныйДокумент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = ЗАПРОС( "SELECT sklad FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ СкладКуда = ЗАПРОС( "SELECT sklad_d FROM spr"+СписокДокументов.code+" WHERE identity_column= " + СписокДокументов.ic );/##CHR(13)##//##CHR(10)##/ ИмяСкладаОткуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладОткуда + "''");/##CHR(13)##//##CHR(10)##/ ИмяСкладаКуда = ЗАПРОС("SELECT name FROM sprskl WHERE code = ''" + СкладКуда + "''");/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СОткуда", СкладОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИдСклада1СКуда", СкладКуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаОткуда", ИмяСкладаОткуда);/##CHR(13)##//##CHR(10)##/ document.SetField("ИмяСкладаКуда", ИмяСкладаКуда); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "sprres"; // по умолчанию источником алкокода товара является справочник ресурсов (для документа инвентаризации) /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="001" OR СписокДокументов.code =="002" OR СписокДокументов.code =="003" OR СписокДокументов.code =="045")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //document.SetField("НомерЕГАИС", ИдЕГАИС);//Номер документа в системе ЕГАИС/##CHR(13)##//##CHR(10)##/ ИсточникАлкоКода = "spec"; //для прихода, расхода и инвентаризации ЕГАИС Алкокод берем из спецификации документа/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ИмяДок == "ПоступлениеЕГАИС" OR ИмяДок == "Поступление")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "ЦенаПриемки"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяПоляСЦеной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code =="MRK")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprnn.maincode AS maincode, /##CHR(13)##//##CHR(10)##/ spec.ed, /##CHR(13)##//##CHR(10)##/ spec.nn, /##CHR(13)##//##CHR(10)##/ spec.kolp,/##CHR(13)##//##CHR(10)##/ spec.name, /##CHR(13)##//##CHR(10)##/ spec.cena,/##CHR(13)##//##CHR(10)##/ sprnn.nnvid,/##CHR(13)##//##CHR(10)##/ dbo.fn_getbarcodes_ex( spec.nn ) AS barcodes, /##CHR(13)##//##CHR(10)##/ sprnn.code AS Артикул, /##CHR(13)##//##CHR(10)##/ sprnn.nnvid AS ВидАлкоголя, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprnn.nnvid ) AS alcotype, /##CHR(13)##//##CHR(10)##/ sprnn.d_litr, /##CHR(13)##//##CHR(10)##/ sprnn.edd_litr, /##CHR(13)##//##CHR(10)##/ sprnn.weight, /##CHR(13)##//##CHR(10)##/ sprnn.a_proc, /##CHR(13)##//##CHR(10)##/ sprnn.alcocode, /##CHR(13)##//##CHR(10)##/ sprnn.importer, /##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic,/##CHR(13)##//##CHR(10)##/ spec.identity_column AS identity_column,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( ПУСТО(СКЛАД),/##CHR(13)##//##CHR(10)##/ "0",/##CHR(13)##//##CHR(10)##/ "dbo.fn_calcsklad( spec.nn, '''', ''" + СКЛАД + "'', ''001'', '''' )" ) + " AS Остаток, /##CHR(13)##//##CHR(10)##/ '''' AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM mark_in spr/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_in_spec spec ON spr.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn /##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column = " + ИДДОКУМЕНТА, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprres.maincode, /##CHR(13)##//##CHR(10)##/ sprres.a_code, /##CHR(13)##//##CHR(10)##/ spec.nnname, /##CHR(13)##//##CHR(10)##/ spec.kolp, /##CHR(13)##//##CHR(10)##/ spec.nn, /##CHR(13)##//##CHR(10)##/ spec.cena, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS alcotype, /##CHR(13)##//##CHR(10)##/ sprres.d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, /##CHR(13)##//##CHR(10)##/ "+ИсточникАлкоКода+".alcocode, /##CHR(13)##//##CHR(10)##/ sprres.importer,/##CHR(13)##//##CHR(10)##/ spec.ic AS spec_ic, /##CHR(13)##//##CHR(10)##/ spec.identity_column AS identity_column, /##CHR(13)##//##CHR(10)##/ ( SELECT TOP 1 boxnumber /##CHR(13)##//##CHR(10)##/ FROM barcodes bc /##CHR(13)##//##CHR(10)##/ WHERE bc.code = ''" + СписокДокументов.code + "'' /##CHR(13)##//##CHR(10)##/ AND bc.ic = spec.ic AND bc.spec_ic = spec.identity_column ) AS boxnumber/##CHR(13)##//##CHR(10)##/ FROM spec" + СписокДокументов.code + " spec/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres ON sprres.code = spec.nn/##CHR(13)##//##CHR(10)##/ WHERE spec.ic = " + СписокДокументов.ic, "Спецификация" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Спецификация" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определяем наличие марок в документе/##CHR(13)##//##CHR(10)##/ IF (СписокДокументов.code == "MRK")/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT mark AS barcode, '''' AS boxnumber FROM mark_in_marks WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки"); /##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT barcode, boxnumber FROM barcodes WHERE ic = ''" + Спецификация.spec_ic + "'' AND spec_ic = ''" + Спецификация.identity_column + "''", "Марки");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("Марки") > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE (!КОНЕЦКОНТЕКСТА("Марки"))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаркаИСМП = Марки.barcode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Марки.boxnumber; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //шк коробки/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИмяПоляСЦеной) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( Спецификация.alcotype, 1, 2 ) AND АлкоДок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ( Спецификация.alcotype == 1, true, false ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Маркировка", ЕСЛИ( Спецификация.alcotype == 1, "Алкоголь", "Пиво" ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ documentItem.SetField("Марка", МаркаИСМП); //Марка /##CHR(13)##//##CHR(10)##/ documentItem.SetField("МаркаИСМП", МаркаИСМП); //Марка /##CHR(13)##//##CHR(10)##/ //documentItem.SetField("МаркаСтандарт", МаркаИСМП); //Марка /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( !ПУСТО( МаркаИСМП ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Марка", МаркаИСМП); //Марка /##CHR(13)##//##CHR(10)##/ documentItem.SetField("МаркаИСМП", МаркаИСМП); //Марка /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Марки" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Марки" ); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаркаИСМП = "";/##CHR(13)##//##CHR(10)##/ documentItem = СоздатьОбъект("Cleverence.Warehouse.DocumentItem",1);/##CHR(13)##//##CHR(10)##/ КодТовара = Спецификация.maincode;/##CHR(13)##//##CHR(10)##/ Количество = Спецификация.kolp;/##CHR(13)##//##CHR(10)##/ ЦенаТовара = Спецификация.cena;/##CHR(13)##//##CHR(10)##/ АлкоКодВ = Спецификация.nnvid;/##CHR(13)##//##CHR(10)##/ АлкоНаим = ЗАПРОС( "SELECT name FROM sprnnvid WHERE code = ''"+АлкоКодВ+"''");/##CHR(13)##//##CHR(10)##/ Объем = Спецификация.d_litr;/##CHR(13)##//##CHR(10)##/ Крепость = Спецификация.a_proc;/##CHR(13)##//##CHR(10)##/ Алкокод = Спецификация.alcocode;/##CHR(13)##//##CHR(10)##/ Производитель = Спецификация.importer;/##CHR(13)##//##CHR(10)##/ ПроизводительИмя= ЗАПРОС( "SELECT shortname FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительИНН= ЗАПРОС( "SELECT inn FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ПроизводительКПП= ЗАПРОС( "SELECT kpp FROM sprclient WHERE code = ''"+Производитель+"''");/##CHR(13)##//##CHR(10)##/ ШККоробки = Спецификация.boxnumber;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ documentItem.ProductId = КодТовара; //Идентификатор товара для которого описана данная позиция/##CHR(13)##//##CHR(10)##/ documentItem.PackingId = КодТовара; //Идентификатор упаковки для заданного товара/##CHR(13)##//##CHR(10)##/ documentItem.CurrentQuantity = 0; //Текущее количество твоара в позиции/##CHR(13)##//##CHR(10)##/ documentItem.DeclaredQuantity = Количество; //Заданное количество в позиции/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ШККоробки ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SSCC = ШККоробки; //коробка, паллета.../##CHR(13)##//##CHR(10)##/ //documentItem.FirstStorageBarcode = ШККоробки;/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ШтрихкодРодителя", ШККоробки);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передадим цену для поступления ЕГАИС и простого поступления/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ИмяПоляСЦеной ) )/##CHR(13)##//##CHR(10)##/ documentItem.SetField(ИмяПоляСЦеной, STR(ЦенаТовара,10,2)); //Стоимость/##CHR(13)##//##CHR(10)##/ //ШтрихКоды = ЗАМЕНИТЬ( ЗАПРОС( "SELECT dbo.fn_getbarcodes_ex( ''" + Спецификация.nn + "'' )" ), ",", "|" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( Спецификация.alcotype, 1, 2 ) AND АлкоДок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Алко", true);/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоМарк", ЕСЛИ( Спецификация.alcotype == 1, true, false ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Маркировка", ЕСЛИ( Спецификация.alcotype == 1, "Алкоголь", "Пиво" ) ); //Является маркируемой продукцией/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКодВ", АлкоКодВ); //Код вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоНаим", АлкоНаим); //Наименование вида алкогольной продукции/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоОбъем", Объем); //Объем/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКрепость", Крепость); //Крепость/##CHR(13)##//##CHR(10)##/ documentItem.SetField("Производитель", ПроизводительИмя);//Производитель/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвИНН", ПроизводительИНН); //ИНН Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("ПроизвКПП", ПроизводительКПП); //КПП Производителя/##CHR(13)##//##CHR(10)##/ documentItem.SetField("АлкоКод", Алкокод); //Код алкогольной продукции /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ document.DeclaredItems.Add(documentItem);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Спецификация" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Спецификация" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавление документа в коллекцию выгружаемых документов/##CHR(13)##//##CHR(10)##/ outDocuments.Add(document);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ //выгрузка документов/##CHR(13)##//##CHR(10)##/ /*}/##CHR(13)##//##CHR(10)##/ catch( СообщениеОбОшибке )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка выгрузки документа. " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + СообщениеОбОшибке + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ ПЕРЕМЕННАЯ( "_ERRORDESCRIPTION", "" ) + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Выгрузка прервана", "MobileSmarts" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ connector.SetDocuments(outDocuments);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF (!_ERROR) RETURN true;',0,0,1,0,'28.07.2023 15:55:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'//Обработка загрузки данных из ТСД/##CHR(13)##//##CHR(10)##/PUBLIC connector, inDocuments,inDocuments_Sbor, Document, УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ,ФормироватьЛогНесоответствий,ДОКУМЕНТНАЙДЕН,СписокНеНайденных,НеСоответствиеАлкокодов;/##CHR(13)##//##CHR(10)##/PUBLIC _ПРОДОЛЖИТЬОБРАБОТКУ, _DODEFAULT, MS_ИмяДок, MS_ИДДОК, КолВоДок, ТСДНазваниеТовара, ТСДШтрихКод, ТСДКодТовара;/##CHR(13)##//##CHR(10)##/PUBLIC _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, _ERROR, _ОШИБКАВЫПОЛНЕНИЯ, КОДДОКУМЕНТА, ИДВНУТРЕННИЙДОК, ИДДОКУМЕНТА, ИДДОКУМЕНТА_MS, docType;/##CHR(13)##//##CHR(10)##/PUBLIC ЗагружатьТолькоНенулевыеКоличества, Фирма, Склад, СкладПолучатель, _ИМЯТАБЛИЦЫ, ИскатьТоварыПоКодуПриЗагрузке, АлкоДок, ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ, /##CHR(13)##//##CHR(10)##/СписокДокументов, АлкогольТолькоНовыеМарки, АлкогольТолькоСтарыеМарки, _ЕстьПараметрТолькоНовыеМарки, _ЕстьПараметрТолькоСтарыеМарки, КОЛВОДОКСБОРШК, indexS;/##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - начало/##CHR(13)##//##CHR(10)##/ИмяПК="127.0.0.1";/##CHR(13)##//##CHR(10)##/Порт ="10501";/##CHR(13)##//##CHR(10)##/ФормироватьЛогНесоответствий = false;/##CHR(13)##//##CHR(10)##/ПутьКФайлуВыгрузки = "C:\Users\Public\Documents"; //каталог для выгрузки лога несоответствий и лога не найденных при сканировании товаров/##CHR(13)##//##CHR(10)##/ЗагружатьТолькоНенулевыеКоличества = false;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true; //активация возможности выбора документов при загрузке из ТСД/##CHR(13)##//##CHR(10)##/СоздаватьТовары = true;/##CHR(13)##//##CHR(10)##/ИскатьТоварыПоКодуПриЗагрузке = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = _MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ = ВЫЧИСЛИТЬ("_MS_ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///ПАРАМЕТРЫ РАБОТЫ - конец/##CHR(13)##//##CHR(10)##/СистемноеСообщение("Пожалуйста, подождите. Идет загрузка данных.");/##CHR(13)##//##CHR(10)##/Компонента = "Cleverence.Warehouse.StorageConnector";/##CHR(13)##//##CHR(10)##/COMPARAMORDER(false);/##CHR(13)##//##CHR(10)##/Фирма = @ФирмаПоУмолчанию;/##CHR(13)##//##CHR(10)##/Склад = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/Склад = ЕСЛИ(ПУСТО(Склад),''001'',Склад);/##CHR(13)##//##CHR(10)##/СкладПолучатель = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ connector = СоздатьОбъект(Компонента,1);/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СН_Оборудования = ЗАПРОС("SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (ПУСТО(СН_Оборудования))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Необходимо записать идентификатор информационной базы MobileSmarts в поле ""серийный номер"" карточки торгового оборудования.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяБД = СН_Оборудования;/##CHR(13)##//##CHR(10)##/Разделитель1 = ":";/##CHR(13)##//##CHR(10)##/Разделитель2 = "/";/##CHR(13)##//##CHR(10)##/СтрокаПодключения = ИмяПК+Разделитель1+Порт+Разделитель2+ИмяБД;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/IF (ПРИЗНАКОЧИСТКИТСД == false)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(ПРИЗНАКОЧИСТКИТСД))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = MESSAGEBOX("Удалить загруженные документы с сервера после загрузки данных?","Вопрос",4);/##CHR(13)##//##CHR(10)##/ IF (Ответ == 6)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( TYPE("connector") <> "O" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //РезультатПодключения = connector.SelectCurrentApp(СтрокаПодключения);/##CHR(13)##//##CHR(10)##/ РезультатПодключения = connector.SelectCurrentApp(ИмяБД);/##CHR(13)##//##CHR(10)##/ IF (РезультатПодключения == 0) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Ошибка при подключении к базе MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СписокНеНайденных = "";/##CHR(13)##//##CHR(10)##/СписокОбработанныхДок="";/##CHR(13)##//##CHR(10)##/НеСоответствиеАлкокодов="";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получение завершенных документов типа приемка с сервера/##CHR(13)##//##CHR(10)##/КОДДОКУМЕНТА = @КодДокумента;/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДДОКУМЕНТА ) )/##CHR(13)##//##CHR(10)##/ КОДДОКУМЕНТА = "001";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = @ИДДокумента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА <> "MRK")/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ЗАПРОС("SELECT identity_column FROM spr000 WHERE code = ''" + КОДДОКУМЕНТА + "'' AND mainic = ''" + ИДВНУТРЕННИЙДОК + "''");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = ИДВНУТРЕННИЙДОК;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("ИД документа: "+ALLTRIM(ИДДОКУМЕНТА) + " / ИД внутренний: "+ALLTRIM(ИДВНУТРЕННИЙДОК)+" / Код документа: "+ALLTRIM(КОДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/docType = ""; //Тип документов. Если в качестве типа документов передать пустую строку, будут возвращены документы вне зависимости от типа./##CHR(13)##//##CHR(10)##/FindDoc = "";/##CHR(13)##//##CHR(10)##/ИдЕГАИС = "";/##CHR(13)##//##CHR(10)##/ТипДокумента = "";/##CHR(13)##//##CHR(10)##/Отправлять_в_ЕГАИС = 0;/##CHR(13)##//##CHR(10)##/checkForFinish = true; //Если true - возвращаются только уже обработанные пользователями документы, иначе возвращаются все документы заданного типа/##CHR(13)##//##CHR(10)##/АлкоДок = false;/##CHR(13)##//##CHR(10)##///определим тип документа в ПП Айтида по типу документа из MobileSmarts/##CHR(13)##//##CHR(10)##/IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИдЕГАИС = ЗАПРОС( "SELECT egaisid FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИдЕГАИС))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "ПоступлениеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="002") //Расходная накладная/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "ВозвратЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="003") //Списание/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Отправлять_в_ЕГАИС = ЗАПРОС( "SELECT egaisstatus FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ ТипДокумента = ЗАПРОС( "SELECT f_income FROM spr"+КОДДОКУМЕНТА+" WHERE identity_column= " + ИДВНУТРЕННИЙДОК );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Отправлять_в_ЕГАИС == 0 )/##CHR(13)##//##CHR(10)##/ docType = "Списание";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docType = "СписаниеЕГАИС";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Переоценка";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="007") //Инвентаризация ТМЦ/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Инвентаризация";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="019") //Внутреннее перемещение/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Перемещение";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="045") //Инвентаризация ЕГАИС/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "АлкоСборНачальныхОстатков";/##CHR(13)##//##CHR(10)##/ АлкоДок = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="055") //Возврат поставщику/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Возврат";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (КОДДОКУМЕНТА =="MRK") //Проверка маркировки/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "Поступление";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF (ПУСТО(КОДДОКУМЕНТА) AND ПУСТО(ИДВНУТРЕННИЙДОК)) //Сбор штрихкодов/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ docType = "СборШК";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Тип загружаемого документа не определен, либо произведена попытка загрузить не поддерживаемый тип документа.");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true; /##CHR(13)##//##CHR(10)##/ Return false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///\\ определили тип документа/##CHR(13)##//##CHR(10)##///получение завершенных документов аданного типа с сервера/##CHR(13)##//##CHR(10)##/inDocuments = connector.GetDocuments(docType, checkForFinish);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///добавим "СборШК" в список возвращаемых документов/##CHR(13)##//##CHR(10)##/КолВоДокСборШК = 0;/##CHR(13)##//##CHR(10)##/IF (docType <> "СборШК" AND !ПУСТО(docType))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //получение завершенных документов "СборШК" с сервера/##CHR(13)##//##CHR(10)##/ inDocuments_Sbor = connector.GetDocuments("СборШК", checkForFinish);/##CHR(13)##//##CHR(10)##/ //получения количества выбранных документов/##CHR(13)##//##CHR(10)##/ КолВоДокСборШК = inDocuments_Sbor.Count;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDocSbor = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDocSbor < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DocumentSbor = inDocuments_Sbor.Item(IndexDocSbor);/##CHR(13)##//##CHR(10)##/ inDocuments.Add(DocumentSbor);/##CHR(13)##//##CHR(10)##/ IndexDocSbor++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получения количества выбранных документов/##CHR(13)##//##CHR(10)##/КолВоДок = inDocuments.Count;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Документ: " + docType + " / Кол-во = " + КолВоДок);/##CHR(13)##//##CHR(10)##/Document = "";/##CHR(13)##//##CHR(10)##/Document_sbor = "";/##CHR(13)##//##CHR(10)##/ИДВНУТРЕННИЙДОК = 1;/##CHR(13)##//##CHR(10)##/ВыбиратьДокументыДляЗагрузки = true;/##CHR(13)##//##CHR(10)##///IF (КолВоДок==0 AND КолВоДокСборШК==0)/##CHR(13)##//##CHR(10)##/IF ( КолВоДок==0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Не найдено завершенных документов заданного типа на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Document = inDocuments.FindById(STR(ИДДОКУМЕНТА));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/indexS = 0;/##CHR(13)##//##CHR(10)##/Строки = "";/##CHR(13)##//##CHR(10)##/ДокументНайден = false;/##CHR(13)##//##CHR(10)##/СписокДокументов = "";/##CHR(13)##//##CHR(10)##/АлкогольТолькоНовыеМарки = false;/##CHR(13)##//##CHR(10)##/АлкогольТолькоСтарыеМарки = false;/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##///блок проверки, найден ли требуемый документ на сервере MS/##CHR(13)##//##CHR(10)##/IF ( inDocuments.IndexOf(Document) >= 0 )//(TYPE(Document) == "U" AND docType <> "СборШК")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Документ есть в коллекции под индексом: " + inDocuments.IndexOf(Document) );/##CHR(13)##//##CHR(10)##/ ДокументНайден = true;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "1";/##CHR(13)##//##CHR(10)##/ КолВоДок = 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬПАРАМЕТР = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ВЫБОРДОКУМЕНТОВ''");/##CHR(13)##//##CHR(10)##/ IF (_ЕСТЬПАРАМЕТР==false OR ПУСТО(_ЕСТЬПАРАМЕТР))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы функции выбора документов в ТСД для загрузки, необходимо загрузить параметр ""MS_ВЫБОРДОКУМЕНТОВ"" в справочник параметров системы."+CHR(13)+/##CHR(13)##//##CHR(10)##/ "Доступ к справочнику параметров системы возможен только из режима расширенного конфигурирования."+CHR(13)+"Свяжитесь с вашим системным администратором.");/##CHR(13)##//##CHR(10)##/ ВыбиратьДокументыДляЗагрузки = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (ВыбиратьДокументыДляЗагрузки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //определим список запрашиваемых параметров в окне с выбором документов/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = "''MS_ВЫБОРДОКУМЕНТОВ''"; //по умолчнию запрашиваем выбор документа/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоНовыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ЕстьПараметрТолькоСтарыеМарки = ЗАПРОС("SELECT code FROM sprparams WHERE name=''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''");/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ СписокЗапрашиваемыхПараметров = СписокЗапрашиваемыхПараметров + "," + "''MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ СписокДокументов = "";/##CHR(13)##//##CHR(10)##/ MSИмяВременнойТаблицы = "##_MSdocstable";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("if object_id(''tempdb.."+MSИмяВременнойТаблицы+"'') is not null drop table "+MSИмяВременнойТаблицы+"");/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("CREATE TABLE "+MSИмяВременнойТаблицы+" (code varchar(100),name varchar(250),date varchar(20),type varchar(50))");/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(IndexDoc+1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ //СборШК/##CHR(13)##//##CHR(10)##/ IndexDoc = 0;/##CHR(13)##//##CHR(10)##/ WHILE (IndexDoc < КолВоДокСборШК)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерПП = ALLTRIM(STR(9000 + IndexDoc + 1,10,0));/##CHR(13)##//##CHR(10)##/ MS_ИМЯДОК = STDF(inDocuments_Sbor.Item(IndexDoc).name);/##CHR(13)##//##CHR(10)##/ MS_ИДДОК = inDocuments_Sbor.Item(IndexDoc).Id;/##CHR(13)##//##CHR(10)##/ MS_ДАТАДОК = STDF(inDocuments_Sbor.Item(IndexDoc).CreateDate);/##CHR(13)##//##CHR(10)##/ MS_ТИПДОК = STDF(inDocuments_Sbor.Item(IndexDoc).DocumentTypeName);/##CHR(13)##//##CHR(10)##/ //MS_СКЛАД = RIGHT("00"+inDocuments.Item(IndexDoc).WarehouseId,3);/##CHR(13)##//##CHR(10)##/ //СкладИмя = ЗАПРОС("SELECT name FROM sprskl where code="+MS_СКЛАД);/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO "+MSИмяВременнойТаблицы+" (code,name,date,type)/##CHR(13)##//##CHR(10)##/ VALUES (''"+MS_ИДДОК+"'',''"+MS_ИМЯДОК+"'',''"+MS_ДАТАДОК+"'',''"+MS_ТИПДОК+"'')");/##CHR(13)##//##CHR(10)##/ СписокДокументов += НомерПП + ". " + MS_ИМЯДОК + " (" + MS_ДАТАДОК+")" + CHR( 13 );/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Текущий документ не найден на сервере MobileSmarts, но найдены следующие документы:"+ CHR( 13 ) + CHR( 13 ) + СписокДокументов+ CHR( 13 )+/##CHR(13)##//##CHR(10)##/ "В следующем диалоговом окне, отметьте те документы, которые желаете загрузить в текущий документ.");/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ", СписокЗапрашиваемыхПараметров );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокДокументов = MS_ВЫБОРДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоНовыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоНовыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоНовыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОНОВЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( _ЕстьПараметрТолькоСтарыеМарки <> false AND !ПУСТО( _ЕстьПараметрТолькоСтарыеМарки ) )/##CHR(13)##//##CHR(10)##/ АлкогольТолькоСтарыеМарки = MS_ЗАГРУЖАТЬТОЛЬКОСТАРЫЕМАРКИ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ( "Список документов: " + СписокДокументов );/##CHR(13)##//##CHR(10)##/IndexDoc = 0;/##CHR(13)##//##CHR(10)##/WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Загружаем = false;/##CHR(13)##//##CHR(10)##/ IF (!ДокументНайден AND !ПУСТО(СписокДокументов))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ IF ( КолВоДокСборШК > 0 AND Загружаем==false)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (TYPE(inDocuments_Sbor) <> "U")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Document = inDocuments_Sbor.Item(IndexDoc);/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТАТСД = Document.Id;/##CHR(13)##//##CHR(10)##/ IF (ATC(СписокДокументов,ИДДОКУМЕНТАТСД) <> 0)/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ДокументНайден) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Загружаем = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("Не найден текущий документ на сервере MobileSmarts");/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Загружаем)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА_MS = Document.Id;/##CHR(13)##//##CHR(10)##/ КолВоСтрок = 0;/##CHR(13)##//##CHR(10)##/ //Склады из документа - начало/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = Document.GetField("ИдСклада1СОткуда");/##CHR(13)##//##CHR(10)##/ СкладКуда = Document.GetField("ИдСклада1СКуда");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СкладОткуда = "";/##CHR(13)##//##CHR(10)##/ СкладКуда = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА <> "005" )/##CHR(13)##//##CHR(10)##/ СкладДокумента = Document.GetField("ИдСклада1С");/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СкладДокумента = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладОткуда) AND TYPE(СкладОткуда)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладОткуда;/##CHR(13)##//##CHR(10)##/ ELSE IF (!ПУСТО(СкладДокумента) AND TYPE(СкладДокумента)<>''L'')/##CHR(13)##//##CHR(10)##/ Склад = СкладДокумента; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СкладКуда) AND TYPE(СкладКуда)<>''L'')/##CHR(13)##//##CHR(10)##/ СкладПолучатель = СкладКуда;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //склады из документа - конец/##CHR(13)##//##CHR(10)##/ Строки = Document.CurrentItems; // строки факт/##CHR(13)##//##CHR(10)##/ //Строки = Document.DeclaredItems; //строки план/##CHR(13)##//##CHR(10)##/ КолВоСтрок = Строки.Count;/##CHR(13)##//##CHR(10)##/ indexS = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Элемент = Строки.Item(indexS);/##CHR(13)##//##CHR(10)##/ КодТовара = Элемент.ProductId;/##CHR(13)##//##CHR(10)##/ Единица = Элемент.PackingName;/##CHR(13)##//##CHR(10)##/ Количество = VAL(Элемент.CurrentQuantity);/##CHR(13)##//##CHR(10)##/ ШтрихКод = Элемент.GetField("barcode");/##CHR(13)##//##CHR(10)##/ Сумма = 0.00;/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ АлкоМарка = "";/##CHR(13)##//##CHR(10)##/ IF (АлкоДок == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ АлкоКод = Элемент.GetField("АлкоКод");/##CHR(13)##//##CHR(10)##/ АлкоПДФ = Элемент.GetField("АлкоПДФ"); /##CHR(13)##//##CHR(10)##/ АлкоМарка = Элемент.GetField("Марка"); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоКод) == "L")/##CHR(13)##//##CHR(10)##/ АлкоКод = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоПДФ) == "L")/##CHR(13)##//##CHR(10)##/ АлкоПДФ = "";/##CHR(13)##//##CHR(10)##/ IF ( TYPE(АлкоМарка) == "L")/##CHR(13)##//##CHR(10)##/ АлкоМарка = ""; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND !ПУСТО( АлкоМарка ) ) /##CHR(13)##//##CHR(10)##/ АлкоПДФ = АлкоМарка;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="001") //Поступление/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("ЦенаПриемки"));/##CHR(13)##//##CHR(10)##/ IF (ПРИХОДЗАГРУЖАТЬСУММУИЗЦЕНЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ Цена = Сумма/(ЕСЛИ(Количество == 0,1,Количество));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("НоваяЦена"));/##CHR(13)##//##CHR(10)##/ СтараяЦена = VAL(Элемент.GetField("СтараяЦена"));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = VAL(Элемент.GetField("Цена")); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Цена = 0.00;/##CHR(13)##//##CHR(10)##/ СтараяЦена = 0.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверка загрузки только новых или старых марок/##CHR(13)##//##CHR(10)##/ IF ( АлкогольТолькоНовыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) < 150 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем старые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоСтарыеМарки AND !ПУСТО( АлкоПДФ ) AND LEN( АлкоПДФ ) > 70 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем новые марки/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( АлкогольТолькоНовыеМарки AND АлкогольТолькоСтарыеМарки AND ПУСТО( АлкоПДФ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //пропускаем товар без марок/##CHR(13)##//##CHR(10)##/ indexS++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Наименование= "";/##CHR(13)##//##CHR(10)##/ Товар = "";/##CHR(13)##//##CHR(10)##/ НабранПоКоду = false;/##CHR(13)##//##CHR(10)##/ IF (ИскатьТоварыПоКодуПриЗагрузке)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( КодТовара ) + "''" );/##CHR(13)##//##CHR(10)##/ IF (Document.DocumentTypeName == "СборШК" OR Document.DocumentTypeName == "Инвентаризация") //если сканировали через Сбор Штрихкодов или инвентаризацию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод <> КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Проверим, нет ли такого штрихкода в базе/##CHR(13)##//##CHR(10)##/ ШтрихКодВБазе = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE bc= ''"+STDF(ШтрихКод)+"''");/##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ШтрихКодВБазе)) //если штрихкода в базе нет/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Добавляем штриховой код в выбранный товар/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO sprnnbc ( nn, bc ) SELECT code, ''" + ШтрихКод + "'' FROM sprres WHERE code= ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // произведем изменение товара, чтобы данные по нему передались в РМК/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE sprres SET ex_code = ex_code WHERE code = ''" + Товар + "''");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если сканировали в любом документе кроме СборШК/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШтрихКод = "";//ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ШтрихКод == КодТовара)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НабранПоКоду = true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ((Количество == 0) AND (ЗагружатьТолькоНенулевыеКоличества)) //обрабатываем записи только с ненулевыми реальными количествами в ТСД/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ CONTINUE; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Определяем товар, по ШК или алкокоду/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres_egais WHERE alcocode = ''" + STDF( АлкоКод ) + "''" );/##CHR(13)##//##CHR(10)##/ КодПоАлкокоду = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT maincode FROM sprres WHERE code = ''" + STDF( Товар ) + "''" ),"КОД НЕ ЗАДАН");/##CHR(13)##//##CHR(10)##/ IF ((КодПоАлкокоду <> КодТовара) AND (ФормироватьЛогНесоответствий == true))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Наименование = ЕСЛИ(!ПУСТО(Товар),ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" ),"ТОВАР НЕ ОПРЕДЕЛЕН");/##CHR(13)##//##CHR(10)##/ НеСоответствиеАлкокодов +="Код товара: " + КодТовара + " Наименование: " + Наименование + " Алкокод: " + Алкокод + " Код по алкокоду: " + КодПоАлкокоду + CHR( 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (НабранПоКоду)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС( "SELECT code FROM sprres WHERE maincode = ''" + STDF( ШтрихКод ) + "''" );/##CHR(13)##//##CHR(10)##/ ШтрихКод = ЗАПРОС("SELECT TOP 1 bc FROM sprnnbc WHERE nn="+STDF(Товар));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Сначала надо попробовать распознать штриховой код по шаблону из справочника единиц измерения/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, bctemplate /##CHR(13)##//##CHR(10)##/ FROM spredn /##CHR(13)##//##CHR(10)##/ WHERE bctemplate <> '''' AND LEN( bctemplate ) = " + ДЛИНА( ШтрихКод ) + " AND/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 1, 1 ), ''0123456789'' ) = 0 OR/##CHR(13)##//##CHR(10)##/ ( CHARINDEX( SUBSTRING( bctemplate, 2, 1 ), ''0123456789'' ) = 0 AND /##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 1 ) = ''" + STDF( LEFT( ШтрихКод, 1 ) ) + "'' ) OR/##CHR(13)##//##CHR(10)##/ SUBSTRING( bctemplate, 1, 2 ) = ''" + STDF( LEFT( ШтрихКод, 2 ) ) + "'' )", "ШаблоныШК", 1 );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодТовараИзШК = "";/##CHR(13)##//##CHR(10)##/ АртикулИзШК = "";/##CHR(13)##//##CHR(10)##/ КоличествоИзШК = "";/##CHR(13)##//##CHR(10)##/ // Проверяем на значащие цифры, удовлетворяет ли наш штрих-код шаблону/##CHR(13)##//##CHR(10)##/ Шаблон = ШаблоныШК.bctemplate;/##CHR(13)##//##CHR(10)##/ НеШтрихКод = false;/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ ДлинаШаблона = ДЛИНА( Шаблон );/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AT( "АКМС", ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) ) == 0 AND ПОДСТРОКА( Шаблон, НомерСимвола, 1 ) <> ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 ) )/##CHR(13)##//##CHR(10)##/ НеШтрихКод = true;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( НеШтрихКод )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСимвола = 1;/##CHR(13)##//##CHR(10)##/ WHILE( НомерСимвола < ДлинаШаблона )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Символ = ПОДСТРОКА( Шаблон, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ СимволШК = ПОДСТРОКА( ШтрихКод, НомерСимвола, 1 );/##CHR(13)##//##CHR(10)##/ IF ( Символ == "К" ) /##CHR(13)##//##CHR(10)##/ КодТовараИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "А" ) /##CHR(13)##//##CHR(10)##/ АртикулИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ ELSE IF ( Символ == "М" )/##CHR(13)##//##CHR(10)##/ КоличествоИзШК += СимволШК;/##CHR(13)##//##CHR(10)##/ НомерСимвола++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодТовараИзШК ) OR !ПУСТО( АртикулИзШК ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT code FROM sprres/##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !ПУСТО( КодТовараИзШК )," maincode= ''" + STDF( КодТовараИзШК ) + "''", /##CHR(13)##//##CHR(10)##/ " a_code= = ''" + STDF( АртикулИзШК ) + "''" ) );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Количество ) )/##CHR(13)##//##CHR(10)##/ Количество = VAL( КоличествоИзШК ) / 1000.00;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ШаблоныШК" );/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "ШаблоныШК" ) AND ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если не нашли подходящий шаблон или товар, то ищем в таблицах штриховых кодов/##CHR(13)##//##CHR(10)##/ ШтрихКод = STDF( ШтрихКод );/##CHR(13)##//##CHR(10)##/ Товар = ЗАПРОС("SELECT nn FROM sprnnbc WHERE bc= ''" + ШтрихКод + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT code FROM sprres_ed WHERE barcode= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg006 WHERE bc= ''" + ШтрихКод + "''/##CHR(13)##//##CHR(10)##/ UNION SELECT nn FROM reg009 WHERE bc= ''" + ШтрихКод + "''" );/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ } //IF ( ПУСТО( Товар ) AND !ПУСТО( ШтрихКод ) ) /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО(Цена) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "001" )/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT TOP 1 cena/##CHR(13)##//##CHR(10)##/ FROM reg001/##CHR(13)##//##CHR(10)##/ WHERE nn= ''" + Товар + "'' AND account_= ''001'' AND priz= ''+'' AND/##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) > 0 OR /##CHR(13)##//##CHR(10)##/ ( DATEDIFF( day, date, GETDATE( ) ) = 0 AND DATEDIFF( second, date, GETDATE( ) ) >= 0 ) ) AND sklad= ''" + Склад + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY date DESC, identity_column DESC " );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Цена = ЗАПРОС( " SELECT dbo.fn_calcsklad_cena( ''" + Товар + "'', '''', ''" + Склад + "'', ''001'' )" );/##CHR(13)##//##CHR(10)##/ } //IF ( !ПУСТО( Товар ) )/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Товар ) AND ПУСТО( Наименование ) ) Наименование = ЗАПРОС( "SELECT name FROM sprres WHERE code = ''" + Товар + "''" );/##CHR(13)##//##CHR(10)##/ // Если не определили товар и пустая марка, то выводим сообщение/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( АлкоПДФ ) AND ПУСТО( Товар ) AND ПУСТО( АлкоКод ) )/##CHR(13)##//##CHR(10)##/ СписокНеНайденных += ШтрихКод + " " + Наименование + CHR( 13 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если есть марка, то вместо ШК записываем ее/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( АлкоПДФ ) ) ШтрихКод = STDF( АлкоПДФ ); /##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false;/##CHR(13)##//##CHR(10)##/ /* прямая запись в БД данных по переоценке закомментирована, т.к. реализовали нормальную загрузку на уровне программы/##CHR(13)##//##CHR(10)##/ IF (КОДДОКУМЕНТА =="005") //Переоценка/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДВНУТРЕННИЙДОК)) //загружаем в записанный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ДокументНайден) //загружаем в исходный документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрокСпецификации = ЗАПРОС("SELECT count(nn) FROM spec005 WHERE ic=''"+ИДВНУТРЕННИЙДОК+"''");/##CHR(13)##//##CHR(10)##/ IF (КоличествоСтрокСпецификации > 0) //если есть строки в документе, то обновляем их/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("UPDATE spec005/##CHR(13)##//##CHR(10)##/ SET cena=''" + STR( Цена, 8, 2 ) + "'',/##CHR(13)##//##CHR(10)##/ oldcena=''" + STR( СтараяЦена, 8, 2 ) + "''/##CHR(13)##//##CHR(10)##/ WHERE ic = ''"+ИДВНУТРЕННИЙДОК+"'' AND nn=''" + Товар + "''","Спецификация")) THROW 1;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //нет строк или загружаем в другой документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ try/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (!ДОБАВИТЬКОНТЕКСТ("INSERT INTO spec005 (ic, nn, cena, oldcena, proc_, nnname, ed, kodn)/##CHR(13)##//##CHR(10)##/ VALUES /##CHR(13)##//##CHR(10)##/ (''" + ИДВНУТРЕННИЙДОК + "'',''" + Товар + "'',''" + STR( Цена, 8, 2 ) + "'',''" + STR( СтараяЦена, 8, 2 ) + "'',''" + ROUND(100*Цена/СтараяЦена-100,2) + "'',/##CHR(13)##//##CHR(10)##/ ''" + STDF( Наименование ) + "'',''" + Единица + "'', (SELECT kodn FROM sprres WHERE code=''" + Товар + "''))","Спецификация")) THROW 2;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ("Спецификация");/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ catch (НомерПрерывания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //загружаем в новый документ/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗаполнилиСпецификацию = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ IF (!ЗаполнилиСпецификацию)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + _ИМЯТАБЛИЦЫ + " ( doccode, docid, date, nn, nnname, kolp, cena, summa, barcode, firm, sklad, sklad_d, alcocode )/##CHR(13)##//##CHR(10)##/ VALUES( ''" + КОДДОКУМЕНТА + "'', " + ИДВНУТРЕННИЙДОК + ", GETDATE( ), ''" + Товар + "'', ''" + STDF( Наименование )+ "'', " + STR( Количество, 16, 3 ) + ", /##CHR(13)##//##CHR(10)##/ " + STR( Цена, 16, 2 ) + ", " + STR( ЕСЛИ(Сумма <> 0, Сумма, Цена * Количество), 16, 2 ) + ", ''" + ШтрихКод + "'', ''" + Фирма + "'', ''" + Склад + "'', ''" + СкладПолучатель + "'', ''" + STDF( АлкоКод ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ indexS++; /##CHR(13)##//##CHR(10)##/ } //WHILE ( indexS < КолВоСтрок ) //цикл по строкам документа /##CHR(13)##//##CHR(10)##/ }//IF (Загружаем)/##CHR(13)##//##CHR(10)##/ IF (УДАЛЯТЬЗАГРУЖЕННЫЕДОКУМЕНТЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ connector.RemoveDocument(ИДДОКУМЕНТА_MS); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДВНУТРЕННИЙДОК++;/##CHR(13)##//##CHR(10)##/ IndexDoc++;/##CHR(13)##//##CHR(10)##/}//WHILE (IndexDoc < КолВоДок)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( СписокНеНайденных ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки1 = ПутьКФайлуВыгрузки + "\Не найдено при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки1 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки1, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки1, СписокНеНайденных);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки1 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл с ненайденными товарами при загрузке по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "Следующие товары не были найдены в базе данных:" + CHR( 13 ) + СписокНеНайденных );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( НеСоответствиеАлкокодов ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (ФормироватьЛогНесоответствий == true)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаВыгрузки2 = ПутьКФайлуВыгрузки+"\Не соотвествуют алкокоды при загрузке из ТСД " + DTOC( Дата(), 4, "" )+''.txt'';/##CHR(13)##//##CHR(10)##/ IF (Файл(ПутьКФайлуВыгрузки,1))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлВыгрузки2 = ФАЙЛСОЗДАТЬ( ИмяФайлаВыгрузки2, 0 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ФайлВыгрузки2, НеСоответствиеАлкокодов);/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ФайлВыгрузки2 );/##CHR(13)##//##CHR(10)##/ Сообщение("Сформирован файл несоответствий алкокодов по пути ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение("В системе не найден каталог выгрузки лога: ""C:\Users\Public\Documents\""");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Сообщение( "По следующим товарам не соответствовали алкокоды при сканировании:" + CHR( 13 ) + НеСоответствиеАлкокодов );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (indexS == 0)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Сообщение("Получено 0 строк товаров из ТСД");/##CHR(13)##//##CHR(10)##/ _ERROR = false;/##CHR(13)##//##CHR(10)##/ //RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/IF(!_ERROR) RETURN true;',0,0,1,0,'28.07.2023 15:55:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "Магазин15";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'28.07.2023 15:55:24') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'28.07.2023 15:55:24') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ТСД MobileSmarts Магазин 15 (для интеграции OLE/COM) v.1.18.5','ТСД',0.00000000,'',0.00000000,7581.00000000,0,'',0.00000000,'','',0,'5B8D5CE1-19F3-4739-85A5-AF063469411F',0,1,0,'28.07.2023 15:55:33') #begin #description Обмен данными со Штрих-Минипос (ЕГАИС)(маркировка) #name Обмен данными со Штрих-Минипос (ЕГАИС)(маркировка) #code 0000000203 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'// ФайлЗаписатьСтроку( ДескрипторФайла, "Выгрузка условий скидок в ККМ" );/##CHR(13)##//##CHR(10)##///Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 OR cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mVtype1 = IIF( vtype == 1 OR vtype == 2, "1", "2" );/##CHR(13)##//##CHR(10)##/ mVtype2 = IIF( vtype == 1 OR vtype == 3, "1", "2" );/##CHR(13)##//##CHR(10)##/ //------ Для скидки на чек берем значения других полей/##CHR(13)##//##CHR(10)##/ IF ( mType_ == "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mSumma_min = mCsumma_min;/##CHR(13)##//##CHR(10)##/ mSumma_max = mCsumma_max;/##CHR(13)##//##CHR(10)##/-- mKolp_min = mCkolp_min;/##CHR(13)##//##CHR(10)##/-- mKolp_max = mCkolp_max;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка = "@" + mParent + ";" + mCode + ";" + mName + ";" + mVtype1 + ";" + mVtype2 + ";" +/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mCtext + ";" + mStart_date + ";" + mEnd_date + ";" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";" + mWday_min + ";" + mWday_max + ";" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";" + mSumma_min + ";" + mSumma_max;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT crd.*, dsc.f_condition, dsc.client_trn_min, dsc.client_trn_max, dsc.parent AS dsc_parent, dsc.f_auto/##CHR(13)##//##CHR(10)##/ FROM " + КАРТЫ + " crd/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON crd.discount = dsc.code", "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте вычисляются запросом к таблицам рабочей БД/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( Query("SELECT SUM(summa) FROM specmcard_turnover WHERE cardn=''" + cardn + "''"), 11, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Количество посещений расчитывается системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STDE( cardn, 24 );/##CHR(13)##//##CHR(10)##/ mName = STDE( name, 100 );/##CHR(13)##//##CHR(10)##/ mCtext = STDE( ctext, 100 );/##CHR(13)##//##CHR(10)##/ mParentAuto = "";/##CHR(13)##//##CHR(10)##/ mParentMemo = "";/##CHR(13)##//##CHR(10)##/ mDiscount = IIF( EMPTY( discount ), schem_discount, discount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Ищем скидку, соответствующую карте/##CHR(13)##//##CHR(10)##/ IF ( f_condition ) {/##CHR(13)##//##CHR(10)##/ mParentAuto = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_condition ) AND Query( "SELECT ISNULL( f_condition, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) {/##CHR(13)##//##CHR(10)##/ // Если код автоматической скидки оказался нулевым или пустым, то пробуем вычислить его на основании таблицы объектов/##CHR(13)##//##CHR(10)##/ mParentAuto = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если скидка была выгружена как накопительная, то ее родитель - код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ IF ( client_trn_min > 0 OR client_trn_max > 0 ) {/##CHR(13)##//##CHR(10)##/ mParentMemo = ALLTRIM( STR( IIF( EMPTY( dsc_parent ), 0, ABS( dsc_parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // если переменная ( одна из, т.к. одна не опред. <=> обе не опред. ) была не определена, вычисляем скидку иначе/##CHR(13)##//##CHR(10)##/ IF ( Empty( client_trn_min ) AND ( Query( "SELECT ISNULL( client_trn_min, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0/##CHR(13)##//##CHR(10)##/ OR Query( "SELECT ISNULL( client_trn_max, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) > 0 ) ) {/##CHR(13)##//##CHR(10)##/ // Код накопительной скидки рассчитываем аналогично/##CHR(13)##//##CHR(10)##/ mParentMemo = Alltrim( STR( Query( "SELECT ISNULL( parent + 10000000, 0 ) FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // f_auto - поле из контекста, признак того, что скидка является автоматической/##CHR(13)##//##CHR(10)##/ // ; если из контекста получить значение этого поля не удалось/##CHR(13)##//##CHR(10)##/ // , вычисляем его запросом через объекты скидок и результат подставляем в контекст/##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", Query( "SELECT f_auto FROM " + discounts + " /##CHR(13)##//##CHR(10)##/ WHERE code = (SELECT TOP 1 discount FROM " + discountobjects + " WHERE card = ''" + code + "'')" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // если предыдущие попытки вычисления кода скидки были безуспешны :)/##CHR(13)##//##CHR(10)##/ // , то вычисляем на основании таблиц рабочей БД/##CHR(13)##//##CHR(10)##/ Column = IIF( Query("/##CHR(13)##//##CHR(10)##/ SELECT f_auto /##CHR(13)##//##CHR(10)##/ FROM specmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + code + "''/##CHR(13)##//##CHR(10)##/ ) ")/##CHR(13)##//##CHR(10)##/ , "mParentAuto"/##CHR(13)##//##CHR(10)##/ , "mParentMemo" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ EVALUATE("IF ( " + Column + " == '''' ) {/##CHR(13)##//##CHR(10)##/ " + Column + " = Alltrim( STR( Query( " + CHR(34) + "SELECT parent + 10000000 /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount /##CHR(13)##//##CHR(10)##/ WHERE code = (/##CHR(13)##//##CHR(10)##/ SELECT MAX(spr.discount) /##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem spr/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount_schem spec ON (spr.code = spec.code)/##CHR(13)##//##CHR(10)##/ WHERE spec.card = ''" + CHR(34) + " + code + " + CHR(34) + "''/##CHR(13)##//##CHR(10)##/ )" + CHR(34) + " ) ) );/##CHR(13)##//##CHR(10)##/ }");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Empty( f_auto ) )/##CHR(13)##//##CHR(10)##/ Replace("СписокКарт", "f_auto", IIF(Column == "mParentAuto", 1, 0));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в зависимости от значения f_auto выгружаем либо код схемы автоматических скидок/##CHR(13)##//##CHR(10)##/ // , либо код схемы накопительных скидок/##CHR(13)##//##CHR(10)##/ Строка = "%" + mCardn + ";" + mName + ";" + mCtext + ";" + mCardSaldo + ";" + IIF( f_auto, mParentAuto, "" )/##CHR(13)##//##CHR(10)##/ + ";0;0;;0;;;;" + IIF( !f_auto, mParentMemo, "" ) + ";0;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------- Формируем строку с различными командами/##CHR(13)##//##CHR(10)##///КомандыОчистки = "$$$CLR {NO_TOV}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСХЕМ ) КомандыОчистки+= "{AUT_S}";/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) КомандыОчистки+= "{DIS_C}";/##CHR(13)##//##CHR(10)##/// Скидки/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИСТАВОК ) КомандыОчистки+= "{FIX_S}";/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, КомандыОчистки );/##CHR(13)##//##CHR(10)##/// ТЕперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',233.00000000,'//Создавать таблицу с товарами/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',234.00000000,'//Рассчитывать цену и количество в таблице с товарами/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( Файл( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ex_code, profile, password FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "[" + СправочникПользователей.ex_code + ";" + STDE( СправочникПользователей.name ) + ";" + STDE( СправочникПользователей.name ) );/##CHR(13)##//##CHR(10)##/ Skip( 1, "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/MessageLOG( "D:\errorlog.txt", true, 4 );/##CHR(13)##//##CHR(10)##///------ Создаем новые пустые файлы для зыгрузки/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для проверки наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/естьФайлы = !ПУСТО( ФайлНайти( СжатьПробелы( path_in ) ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN естьФайлы;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( path_in ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_РАССЧИТЫВАТЬИТОГИЧЕКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/СкладККМ = sklad; // Сохраняем поле склад/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/currentCard = "";/##CHR(13)##//##CHR(10)##/chequeType = "0";/##CHR(13)##//##CHR(10)##/ksnum = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", 1);/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", 2);/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", 3);/##CHR(13)##//##CHR(10)##/ TranzHour = LEFT( TranzTime, 2 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", 4 );/##CHR(13)##//##CHR(10)##/ kkm = VAL( GetWord( string, ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", 6);/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", 7);/##CHR(13)##//##CHR(10)##/ wareCode = STRTRAN( STRTRAN( GetWord( string, ";", 8 ), CHR( 160 ), "" ), " ", "" );/##CHR(13)##//##CHR(10)##/ discountType = STRTRAN( GetWord( string, ";", 9 ), ",","." );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ barcode = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ POSNumber = "0";/##CHR(13)##//##CHR(10)##/ wareMark = "";/##CHR(13)##//##CHR(10)##/ PriceWD = Price;/##CHR(13)##//##CHR(10)##/ SummWD = Summ;/##CHR(13)##//##CHR(10)##/ ecrSession = STR( ksnum );/##CHR(13)##//##CHR(10)##/ currency = "";/##CHR(13)##//##CHR(10)##/ education = "";/##CHR(13)##//##CHR(10)##/ commentCode = "";/##CHR(13)##//##CHR(10)##/ DockIndCode = "";/##CHR(13)##//##CHR(10)##/ universalNDOK = "";/##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( kkm ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 70, 71 ) AND discountType == "3" ) // Скидка по дисконтной карте/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ currentCard = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Продажа по штриховому коду/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 24 OR VAL( tranzType ) == 55 OR VAL( tranzType ) == 40 OR VAL( tranzType ) == 67 OR VAL( tranzType ) == 64 OR ( VAL( tranzType ) >= 70 AND VAL( tranzType ) <> 260 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ barcode = warecode;/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ //IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + ecrNumber + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + posNumber + " ) /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ transType = tranzType; // Чтобы не путаться везде/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Транзакции с типами 301 и более, используются для проведения нефинансовых документов/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) >= 301 AND VAL( tranzType ) <= 310 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- По типу транзакции определяем тип документа/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "301" ) docCode = "001"; //------- Приходная накладаная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "302" ) docCode = "007"; //------- Инвентаризация ТМЦ /##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "307" ) docCode = "019"; //------- Внутренее перемещение/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "308" ) docCode = "002"; //------- Расходная накладная/##CHR(13)##//##CHR(10)##/ ELSE IF ( tranzType == "310" ) docCode = "003"; //------- Списание / оприходование/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !ФайлКонецФайла( fileHandle ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( UPPER( LEFT( string, 9) ) == " 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2, 3, 13 ))");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "3" OR tranzType == "13" OR tranzType == "260" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "260" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = "046";/##CHR(13)##//##CHR(10)##/ Quantity = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docCode = ЕСЛИ( ТИПДОКУМЕНТА == 1, "008", ЕСЛИ( ТИПДОКУМЕНТА == 2, "007", ЕСЛИ( ТИПДОКУМЕНТА == 3, "001", /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТИПДОКУМЕНТА == 4, "002", ЕСЛИ( ТИПДОКУМЕНТА == 5, "003", ЕСЛИ( ТИПДОКУМЕНТА == 6, "019", "008" ) ) ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вместо кода может встречаться ШК товара/##CHR(13)##//##CHR(10)##/ IF ( ДЛИНА( wareCode ) >= 10 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ wareCode = ЗАПРОС( "SELECT TOP 1 maincode FROM sprres WHERE code IN /##CHR(13)##//##CHR(10)##/ (SELECT nn FROM sprnnbc WHERE bc = ''" + STDF( wareCode ) + "'' /##CHR(13)##//##CHR(10)##/ UNION SELECT barcode FROM sprres_ed WHERE barcode = ''" + STDF( wareCode ) + "'' )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ nn = wareCode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summa = VAL( summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ IF ( transType == "3" OR transType == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ type = "001";/##CHR(13)##//##CHR(10)##/ chequeType = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( transType == "1" OR transType == "11" OR transType == "260" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ type = "001";/##CHR(13)##//##CHR(10)##/ chequeType = "0";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ summasale = summa;/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, /##CHR(13)##//##CHR(10)##/ s.ed_weight, s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE LTRIM(RTRIM(maincode)) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "");/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.ed_weight ), "");/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3)) + " " + ALLTRIM( ТОВАРИНФО.edd_litr), "");/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "");/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, СкладККМ, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СписокФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##/// IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// date = ДАТАДОКУМЕНТОВ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + posNumber + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode, 150 ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + seller + "'', ''" + warecode + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛПЕРЕИМЕНОВАТЬ( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT= 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/PUBLIC SkipEvent;/##CHR(13)##//##CHR(10)##/SkipEvent = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если при выгрузке в карточке ТО не определен способ доставки и на диске найден файл-флаг/##CHR(13)##//##CHR(10)##/IF ( EMPTY( exchangeservice_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) AND !Empty( path_flag_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выводим предупреждающее сообщение с вопросом "Продолжить" и вариантами Да/Нет, /##CHR(13)##//##CHR(10)##/// если было выбрано Нет, то функция вернет значение 7/##CHR(13)##//##CHR(10)##/IF ( ТипВыгрузки == ''КАРТЫ'' )/##CHR(13)##//##CHR(10)##/ IF ( MessageBox("Внимание! Выгрузка дисконтных карт, осуществленная после выгрузки схем скидок, "+/##CHR(13)##//##CHR(10)##/ "приведет к уничтожению связей между скидками и картами в файле выгрузки. "+/##CHR(13)##//##CHR(10)##/ "Вы уверены, что хотите продолжить?", "Предупреждение", 4) == 7 ) SkipEvent = TRUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ AddMessage("Выгрузка карт была отменена пользователем.");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // обрабатываем флаги из формы обмена данными/##CHR(13)##//##CHR(10)##/ AdditionalCommands = '''';/##CHR(13)##//##CHR(10)##/ IF ( clearschemes ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{AUT_S}'';/##CHR(13)##//##CHR(10)##/ IF ( clearcards ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{DIS_C}'';/##CHR(13)##//##CHR(10)##/ IF ( clearrates ) /##CHR(13)##//##CHR(10)##/ AdditionalCommands += ''{FIX_S}'';/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // в качестве признака наличия доп. команд исполльзуем пустоту строки с ними/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" + IIF( !Empty( AdditionalCommands ), " $$$CLR {NO_TOV}" + AdditionalCommands, "" ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 20000000, 10000000 ) ) ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( name, ";", " ") ), 100 ) + "; ;;;;;;;;;;;;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + IIF( ic < 0, 20000000, 10000000 ) ) ) ) + ";0;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##///mBarcode = ЗАПРОС( "SELECT TOP 1 bc FROM sprnnbc WHERE nn = ''" + nn + "'' ORDER BY identity_column" ); // ALLTRIM( GETWORD( barcode, "", "", 1 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype, ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), sprres.d_litr ) AS d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, sprres.ed, (SELECT ffdcode FROM spredn WHERE code = sprres.ed) AS ffdcode, ISNULL( sprres_g.rsubject, '''' ) AS rsubject, sprres.group_, sprres.f_make, sprres.cat, /##CHR(13)##//##CHR(10)##/ sprres.markgroup, sprres.f_mark AS sprres_f_mark, sprres_g.paytype, ( SELECT TOP 1 bc FROM sprnnbc WHERE nn = sprres.code ) AS barcode, /##CHR(13)##//##CHR(10)##/ t.f_action, t.maxdiscount, t.kodn, t.kolp, t.kkm_section, t.fractqty, t.waretype, t.parent, t.name AS fname, t.cname,/##CHR(13)##//##CHR(10)##/ t.code, t.cena, t.article, CASE WHEN EXISTS( SELECT * FROM " + ШТРИХКОДЫ + " WHERE code = t.code ) THEN 1 ELSE 0 END AS bcexists/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t ON t.nn = sprres.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( "Выгрузка товаров", КОЛИЧЕСТВОСТРОК( "ТоварИнфо" ) );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ПОКА ( !КОНЕЦКОНТЕКСТА( "ТоварИнфо" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( НОМЕРСТРОКИ( "ТоварИнфо" ) % 10 == 0 )/##CHR(13)##//##CHR(10)##/ ИНДИКАТОР( НОМЕРСТРОКИ( "ТоварИнфо" ), "Выгружено " + НОМЕРСТРОКИ( "ТоварИнфо" ) + " из " + КОЛИЧЕСТВОСТРОК( "ТоварИнфо" ) + " товаров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mRsubject = ТоварИнфо.rsubject;/##CHR(13)##//##CHR(10)##/ mBarcode = ТоварИнфо.barcode;/##CHR(13)##//##CHR(10)##/ paytype = "";/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( ТоварИнфо.group_ ) )/##CHR(13)##//##CHR(10)##/ paytype = STR( VAL( ТоварИнфо.paytype ) ); //ЗАПРОС( "SELECT paytype FROM sprres_g WHERE code = ''" + ТоварИнфо.group_ + "''" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( ТоварИнфо.fname ), ТоварИнфо.name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( ТоварИнфо.cname ), ТоварИнфо.shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //mAlco = VAL( ТоварИнфо.nnvid ) > 0 AND VAL( ТоварИнфо.nnvid ) < 500 AND !ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ mAlco = VAL( ТоварИнфо.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ //ПивнаяПродукция = VAL( ТоварИнфо.nnvid ) >= 500 OR ВСПИСКЕ( VAL( ТоварИнфо.nnvid ), 261, 262, 263 );/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( ТоварИнфо.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ mMark = ЕСЛИ( mAlco, "1", "0" );/##CHR(13)##//##CHR(10)##/ mMarkGroup = ALLTRIM( ТоварИнфо.markgroup );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТоварИнфо.sprres_f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара /##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, /##CHR(13)##//##CHR(10)##/ //1520 - обувь, /##CHR(13)##//##CHR(10)##/ //0002 - изделия из меха, /##CHR(13)##//##CHR(10)##/ //0003 - лекарственные препараты, /##CHR(13)##//##CHR(10)##/ //9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, /##CHR(13)##//##CHR(10)##/ //9997 - шины, /##CHR(13)##//##CHR(10)##/ //9996 - фото, /##CHR(13)##//##CHR(10)##/ //9995 - духи и парфюм, /##CHR(13)##//##CHR(10)##/ //9994 - альтернативный табак, /##CHR(13)##//##CHR(10)##/ //9993 - молочная продукция, /##CHR(13)##//##CHR(10)##/ //9992 - вода/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как прочая маркировка /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТоварИнфо.markgroup == "9999")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "444D"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9998")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0004"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9997")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0007"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9996")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0008";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9995")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0006"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9994")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0014";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9993")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0009"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.markgroup == "9992")/##CHR(13)##//##CHR(10)##/ mMarkGroup = "0012"; /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mMarkGroup = ALLTRIM( ТоварИнфо.markgroup );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( mRsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mRsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.f_make ) /##CHR(13)##//##CHR(10)##/ mRsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТоварИнфо.cat == "002" )/##CHR(13)##//##CHR(10)##/ mRsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ mRsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ТоварИнфо.ffdcode))/##CHR(13)##//##CHR(10)##/ mffdcode = ТоварИнфо.ffdcode; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Выгружаем макс. скидку: если -1, то -1, если 0, то 0 и т.д./##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, ALLTRIM( STR( maxdiscount, 16, 2 ) ), "0");/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/ // Остаток/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ mFlags = ЕСЛИ( fractqty OR waretype == 0, "1","" );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF( parent < 0, 20000000, 10000000 ) ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + //1. код товара/##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2. штрихкод/##CHR(13)##//##CHR(10)##/ mName + ";" + //3. наименование/##CHR(13)##//##CHR(10)##/ mCName + ";" + //4. кр. наименование/##CHR(13)##//##CHR(10)##/ mCena + ";" + //5. цена/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6. остаток/##CHR(13)##//##CHR(10)##/ ";" + //7. код гр. скидок/##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8. разрешить дробное кол-во/##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //9. номер секции/##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //10. макс процент скидки/##CHR(13)##//##CHR(10)##/ mKodn + ";" + //11. код группы налогов/##CHR(13)##//##CHR(10)##/ STDE( article, 20 ) + ";" + //12. артикул/##CHR(13)##//##CHR(10)##/ mMark + ";" + //13. запрашивать марку/##CHR(13)##//##CHR(10)##/ ";" + //14. не используется/##CHR(13)##//##CHR(10)##/ ";" + //15. не используется/##CHR(13)##//##CHR(10)##/ mParent + ";" + //16. код родтельской группы/##CHR(13)##//##CHR(10)##/ "1;" + //17. товар ли группа. 1 - товар /##CHR(13)##//##CHR(10)##/ ";" + //18. Список кодов скидочных групп через ","/##CHR(13)##//##CHR(10)##/ ";" + //19. категории блюд/##CHR(13)##//##CHR(10)##/ ";" + //20. количество модификаторов/##CHR(13)##//##CHR(10)##/ ";" + //21. Комплект/##CHR(13)##//##CHR(10)##/ ";" + //22. Направления печати/##CHR(13)##//##CHR(10)##/ ";" + //23. Отключить контроль остатка/##CHR(13)##//##CHR(10)##/ ";" + //24. учет по доп. характеристикам/##CHR(13)##//##CHR(10)##/ ";" + //25. макс процент бонуса/##CHR(13)##//##CHR(10)##/ mRsubject + ";" + //26. предмет расчета/##CHR(13)##//##CHR(10)##/ ";" + //27. группа связанных товаров/##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //28. тип маркировки/##CHR(13)##//##CHR(10)##/ mffdcode + ";" + //29. единица измерения/##CHR(13)##//##CHR(10)##/ ";" + //30. код товара для ОФД/##CHR(13)##//##CHR(10)##/ ";" + //31. код справочник Оформление горячих клавиш/##CHR(13)##//##CHR(10)##/ ";" + //32. запрет продажи/##CHR(13)##//##CHR(10)##/ ";"; //33. весовой товар/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mNNVid + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mVolume + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + "" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "" + mAProc + "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Сразу добавляем строки для выгрузки штриховых кодов/##CHR(13)##//##CHR(10)##/ IF ( ТоварИнфо.bcexists == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " WHERE code =''" + mCode + "'' AND barcode <> '''' AND barcode <> ''" + STDF( mBarcode ) + "'' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ALLTRIM( barcode ) <> mBarcode )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = "#" + mCode + ";" + STDE( barcode ) + ";" + mName + ";" + mCName + ";" + ALLTRIM( STR( ТоварИнфо.cena * koef, 8, 2 ) ) + ";;;;;" + STRTRAN( ALLTRIM( koef ), ",", ".") + ";";/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/ИНДИКАТОР( );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Для ШТРИХ выводим команды удаления это делается в конце файла/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CLR" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Подаем команды на добавление товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, ЕСЛИ(saldotype == 1, "$$$RPL", "$$$ADD" ));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Теперь можно закрыть файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileName = "";/##CHR(13)##//##CHR(10)##/IF ( !f_fileflag )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //------- Берем имя файла флага из карточки оборудования/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN fileName;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/// Знак "!" - только для схем автоматических скидок, следовательно/##CHR(13)##//##CHR(10)##/// , необходима проверка скидки на то, что она автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// если f_condition, то скидка автоматическая/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ищем в папке хотя бы одну автоматическую скидку, если не находим, пропускаем такую папку/##CHR(13)##//##CHR(10)##/ IF ( !Query( "SELECT MAX( CAST( f_condition AS int ) ) FROM " + discounts + " WHERE parent = " + ic ) ) /##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "!" + STR( ic + 10000000 ) + ";" + STDE( name, 100 ) + ";1" );/##CHR(13)##//##CHR(10)##/ SKIP();/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если происходит выгрузка карт и пользователь отказался от их выгрузки, пропускаем обработку события /##CHR(13)##//##CHR(10)##/IF ( SkipEvent ) RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидками/##CHR(13)##//##CHR(10)##/// Выгружаем скидки накопительные (два первых условия) либо автоматические (третье условие)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT dsc.*/##CHR(13)##//##CHR(10)##/ , ISNULL( dsc_parent.name , '''' ) AS parentName/##CHR(13)##//##CHR(10)##/ -- , cnd.time_min, cnd.time_max, cnd.wday_min, cnd.wday_max, cnd.kolp_min, cnd.kolp_max/##CHR(13)##//##CHR(10)##/ -- , cnd.summa_min, cnd.summa_max/##CHR(13)##//##CHR(10)##/ FROM " + СКИДКИ + " dsc/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ПАПКИСКИДОК + " dsc_parent ON dsc.parent = dsc_parent.ic/##CHR(13)##//##CHR(10)##/ -- LEFT OUTER JOIN " + conditions + " cnd ON dsc.code = cnd.code/##CHR(13)##//##CHR(10)##/ WHERE dsc.client_trn_min > 0 OR dsc.client_trn_max > 0 OR dsc.f_auto = 1", "СписокСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 10000000 ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), IIF( f_auto, 50, 100 ) );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), IIF( f_auto, 30, 100 ) );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// mType = IIF( INLIST( vtype, 1, 2 ), 1, 2 ); // тип ( 1 - скидка, 2 - надбавка )/##CHR(13)##//##CHR(10)##/// mKind = IIF( INLIST( vtype, 1, 3 ), 1, 2 ); // вид ( 1 - процентная, 2 - суммовая )/##CHR(13)##//##CHR(10)##/// mTimeMin = ALLTRIM( STRTRAN( TTOC( time_min, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mTimeMax = ALLTRIM( STRTRAN( TTOC( time_max, 8 ), ":", "." ) );/##CHR(13)##//##CHR(10)##/// mWdayMin = IIF( wday_min == 0, "", ALLTRIM( STR( wday_min, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mWdayMax = IIF( wday_max == 0, "", ALLTRIM( STR( wday_max, 1 ) ) );/##CHR(13)##//##CHR(10)##/// mKolpMin = ALLTRIM( STR( kolp_min, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mKolpMax = ALLTRIM( STR( kolp_max, 7, 3 ) );/##CHR(13)##//##CHR(10)##/// mSummaMin = ALLTRIM( STR( summa_min, 8, 2 ) );/##CHR(13)##//##CHR(10)##/// mSummaMax = ALLTRIM( STR( summa_max, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // накопительная скидка/##CHR(13)##//##CHR(10)##/ Строка = "№" + ALLTRIM( STR( VAL( code ) ) ) + ";" + mName + ";" + mCtext + ";" + mDsc_value + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_min, 11, 2 ) ) + ";" +/##CHR(13)##//##CHR(10)##/ "1;" + ALLTRIM( STR( client_trn_max, 11, 2 ) ) + ";;;;;" +/##CHR(13)##//##CHR(10)##/ mParent + ";" + STDE( parentName, 100 );/##CHR(13)##//##CHR(10)##/ // автоматическая скидка/##CHR(13)##//##CHR(10)##/// выгрузка автоматических скидок - в обработке выгрузки условий/##CHR(13)##//##CHR(10)##/// IF ( f_auto )/##CHR(13)##//##CHR(10)##/// Строка = "@" + mParent + ";" + STDE( code, 8 ) + ";" + mName + ";" + mType + ";" + mKind + ";" /##CHR(13)##//##CHR(10)##/// + mDsc_value + ";" + mCtext + ";01.01.1753;31.12.9999;" + mTimeMin + ";" /##CHR(13)##//##CHR(10)##/// + mTimeMax + ";" + mWdayMin + ";" + mWdayMax + ";" + mKolpMin + ";" /##CHR(13)##//##CHR(10)##/// + mKolpMax + ";" + mSummaMin + ";" + mSummaMax;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.08.2023 10:42:35') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными со Штрих-Минипос (ЕГАИС)(маркировка)','ККМ',0.00000000,'',0.00000000,1354.00000000,0,'',0.00000000,'','',0,'B5E69965-9EE3-4D27-9820-9398B79AD6EF',0,1,0,'10.08.2023 10:42:35') #begin #description Телеграм - обработчик хуков #name Телеграм - обработчик хуков #code 0000000239 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',1300.00000000,'//Обработка сервера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. указываем АПИ ключ бота, который выдается при создании нового бота через BotFather/##CHR(13)##//##CHR(10)##/API_КЛЮЧ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///2. укажем часть url, по которому бот посылает хуки на наш сервер/##CHR(13)##//##CHR(10)##///если url задан как https://нашдомен.ru/telegram, то указываем в URL_part только часть без домена - telegram/##CHR(13)##//##CHR(10)##///пример 2: для url: https://нашдомен.ru/api/telegram указываем api/telegram/##CHR(13)##//##CHR(10)##/URL_PART = "telegram";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///3. укажем секретный заголовок запроса, по которому будем идентифицировать нашего бота./##CHR(13)##//##CHR(10)##///серкретный заголовок устанавливается черех параметр secret_token запроса setWebhook для привязки хука к боту/##CHR(13)##//##CHR(10)##/SECRET_HEADER = "ItidaTheBest";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///4. укажем файл журнала для логирования запросов и ответов/##CHR(13)##//##CHR(10)##/ИмяФайлаЖурнала = RESTAPI.ИМЯФАЙЛАЖУРНАЛА( "D:\", "telegram_log", true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///вызываем обработку запросов для бота с указанным ключом/##CHR(13)##//##CHR(10)##/RETURN RESTAPI.TELEGRAM_ОбработатьЗапрос( ИмяФайлаЖурнала, URL_PART, API_КЛЮЧ, SECRET_HEADER);',0,0,1,0,'20.11.2023 15:41:11') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Телеграм - обработчик хуков','ДСЕРВЕР',8093.00000000,'Профиль для обработки хуков Телегам бота',0.00000000,7604.00000000,0,'',0.00000000,'','',0,'36EBAD53-89A2-43E1-8F38-80356E623D8D',0,1,0,'20.11.2023 15:41:11') #begin #description Профиль DataMobile Мобильная торговля #name Профиль DataMobile Мобильная торговля #code 0000000240 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',15.00000000,'IF ( TYPE("ИНДЕКСУСТРОЙСТВА") == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Для работы данного профиля требуется Айтида версии 4.3.2 и выше", "Требуется обновление");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ ВЛИЯЮТ НА АЛГОРИТМ ВЫГРУЗКИ/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬОСТАТКИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬДОКУМЕНТ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬЦЕНЫ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСКЛАДЫ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬКОНТРАГЕНТОВ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬКАТЕГОРИИ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬТОВАРЫ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬШТРИХКОДЫ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСТАТУСЫДОКУМЕНТОВ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬСТАТУСЫПЛАТЕЖЕЙ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬПРИЧИНЫОТМЕНЫ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "СПИСОКДОКУМЕНТОВ" ) == "U" ) СПИСОКДОКУМЕНТОВ= "";/##CHR(13)##//##CHR(10)##/IF ( ТИП( "ПРИЗНАКОЧИСТКИТСД" ) == "U" ) ПРИЗНАКОЧИСТКИТСД = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПАПКАВЫГРУЗКИ = ЗАПРОС( "SELECT CASE WHEN connectstring = '''' THEN serialnumber ELSE connectstring END FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(_ПАПКАВЫГРУЗКИ))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПРАВСИМВ( _ПАПКАВЫГРУЗКИ, 1 ) != "\" )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "\";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ФАЙЛ(_ПАПКАВЫГРУЗКИ + "IN", 1) )/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ += "IN\"; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ПАПКАВЫГРУЗКИ = "D:\";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬПОЛЬЗОВАТЕЛЕЙ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьПользователей() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСКЛАДЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьМагазины() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКОНТРАГЕНТОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьКонтрагентов() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///выгрузка категорий/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКАТЕГОРИИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьКатегории() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьТовары() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬШТРИХКОДЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьШтрихкоды() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬЦЕНЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьЦены() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬОСТАТКИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьОстатки() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСТАТУСЫДОКУМЕНТОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьСтатусыДокументов() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСТАТУСЫПЛАТЕЖЕЙ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьСтатусыПлатежей() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬПРИЧИНЫОТМЕНЫ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !RESTAPI.DMTRADE_ВыгрузитьПричиныОтменыДоставки() )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:41:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',20.00000000,'//Количество устройств ТСД/##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'20.11.2023 15:41:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',16.00000000,'// Используйется следующий шаблон/##CHR(13)##//##CHR(10)##/// ШК;Артикул;Наименование;Характеристика;АлкоНаим;АлкоОбъем;АлкоКрепость;Производитель;ПроизвИНН;ПроизвКПП;АлкоКод;АлкоПДФ;АлкоСН;ДатаРозлива;АлкоЕстьВФормах;КодФормыА;Факт/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:41:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',18.00000000,'//Свойства драйвера ТСД/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( КОДОБОРУДОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Перед настройкой драйвера оборудования необходимо записать карточку торгового оборудования." );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ДРАЙВЕРСУБД" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_ДРАЙВЕРСУБД''";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_СЕРВЕРБАЗЫДАННЫХ" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_СЕРВЕРБАЗЫДАННЫХ''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ПОРТСЕРВЕРАБАЗЫДАННЫХ" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_ПОРТСЕРВЕРАБАЗЫДАННЫХ''"; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ПОЛЬЗОВАТЕЛЬСЕРВЕРАБАЗЫДАННЫХ" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_ПОЛЬЗОВАТЕЛЬСЕРВЕРАБАЗЫДАННЫХ''"; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ПАРОЛЬСЕРВЕРАБАЗЫДАННЫХ" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_ПАРОЛЬСЕРВЕРАБАЗЫДАННЫХ''"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ИМЯБАЗЫДАННЫХ" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ += ЕСЛИ( !ПУСТО( СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ ), ",", "" ) + "''DMTRADE_ИМЯБАЗЫДАННЫХ''"; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///загрузим настройки из БД/##CHR(13)##//##CHR(10)##/DMTRADE_DBDRIVER = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBDRIVER", КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##///если драйвер не указан, то используем native client 11/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( DMTRADE_DBDRIVER ) )/##CHR(13)##//##CHR(10)##/ DMTRADE_DBDRIVER = "SQL SERVER Native Client 11.0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/DMTRADE_DBSERVER = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBSERVER", КОДОБОРУДОВАНИЯ ); /##CHR(13)##//##CHR(10)##/DMTRADE_DBPORT = VAL( RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBPORT", КОДОБОРУДОВАНИЯ ) );/##CHR(13)##//##CHR(10)##/DMTRADE_DBUSER = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBUSER", КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/DMTRADE_DBPASSWORD = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBPASSWORD", КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/DMTRADE_DBNAME = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DBNAME", КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ );/##CHR(13)##//##CHR(10)##/IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если поле драйвера оставили пустым, то используем native client 11/##CHR(13)##//##CHR(10)##/DMTRADE_DBDRIVER = ЕСЛИ( ПУСТО( DMTRADE_ДРАЙВЕРСУБД ), "SQL SERVER Native Client 11.0", DMTRADE_ДРАЙВЕРСУБД ); /##CHR(13)##//##CHR(10)##/DMTRADE_DBSERVER = DMTRADE_СЕРВЕРБАЗЫДАННЫХ; /##CHR(13)##//##CHR(10)##/DMTRADE_DBPORT = DMTRADE_ПОРТСЕРВЕРАБАЗЫДАННЫХ;/##CHR(13)##//##CHR(10)##/DMTRADE_DBUSER = DMTRADE_ПОЛЬЗОВАТЕЛЬСЕРВЕРАБАЗЫДАННЫХ;/##CHR(13)##//##CHR(10)##/DMTRADE_DBPASSWORD = DMTRADE_ПАРОЛЬСЕРВЕРАБАЗЫДАННЫХ;/##CHR(13)##//##CHR(10)##/DMTRADE_DBNAME = DMTRADE_ИМЯБАЗЫДАННЫХ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///перезапишем в БД значения параметров/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBDRIVER", DMTRADE_DBDRIVER, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBSERVER", DMTRADE_DBSERVER, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBPORT", DMTRADE_DBPORT, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBUSER", DMTRADE_DBUSER, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBPASSWORD", DMTRADE_DBPASSWORD, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DBNAME", DMTRADE_DBNAME, КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ = false;/##CHR(13)##//##CHR(10)##///если параметры связи с БД не определены, то не выполняем запросов к БД DM/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( DMTRADE_DBSERVER ) OR ПУСТО( DMTRADE_DBUSER ) OR ПУСТО( DMTRADE_DBPASSWORD ) OR ПУСТО( DMTRADE_DBNAME ) )/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///проверим соединение с БД/##CHR(13)##//##CHR(10)##/РезультатПроверки = RESTAPI.DMTRADE_ПроверитьСоединениеСБД( КОДОБОРУДОВАНИЯ, true );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///получим список устройств с сервера/##CHR(13)##//##CHR(10)##/IF ( ! RESTAPI.DMTRADE_ПроверитьПараметрСистемы( "DMTRADE_ИДУСТРОЙСТВА" ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ = "''DMTRADE_ИДУСТРОЙСТВА''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( RESTAPI.DMTRADE_ПолучитьДанныеИзБД( КОДОБОРУДОВАНИЯ, "SELECT ID, CONVERT( binary, Name ) AS NAME, CONVERT( binary, SN ) AS SN, TimeLastSync FROM Devices", "Таблица устройств", true ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //создадим временную таблицу с мобильными устройствами, в которую запишем все полученные из БД DM устройства для их последующего выбора/##CHR(13)##//##CHR(10)##/ DMTRADE_ИмяТаблицыУстройств = "##DMTRADE_Devices";/##CHR(13)##//##CHR(10)##/ ЗАПРОС ( "IF object_id( ''tempdb.." + DMTRADE_ИмяТаблицыУстройств + "'' ) is not null DROP TABLE " + DMTRADE_ИмяТаблицыУстройств );/##CHR(13)##//##CHR(10)##/ ЗАПРОС ( "CREATE TABLE " + DMTRADE_ИмяТаблицыУстройств + " ( ID int, Name nvarchar(100), SN nvarchar(100), TimeLastSync datetime )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "DMTRADE_DATATABLE" ); /##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "DMTRADE_DATATABLE" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("INSERT INTO " + DMTRADE_ИмяТаблицыУстройств + " ( ID, Name, SN, TimeLastSync )/##CHR(13)##//##CHR(10)##/ VALUES ( " + STR( DMTRADE_DATATABLE.ID, 10, 0 ) + ",''" + /##CHR(13)##//##CHR(10)##/ STDF( ПЕРЕКОДИРОВАТЬ( DMTRADE_DATATABLE.Name, ''Unicode'', ''ANSI'' ), 100 ) + "'',''" + /##CHR(13)##//##CHR(10)##/ STDF( ПЕРЕКОДИРОВАТЬ( DMTRADE_DATATABLE.SN, ''Unicode'', ''ANSI'' ), 100 ) + "'',''" + /##CHR(13)##//##CHR(10)##/ DMTRADE_DATATABLE.TimeLastSync + "'' )");/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "DMTRADE_DATATABLE" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "DMTRADE_DATATABLE" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //загрузим настройку с выбранным ИД устройства из БД/##CHR(13)##//##CHR(10)##/ DMTRADE_DEVICEID = RESTAPI.DMTRADE_ЗагрузитьПараметрСоединения( "DEVICEID", КОДОБОРУДОВАНИЯ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //выведем запрос параметров с выбором устройства для привязки к оборудованию/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", СПИСОКЗАПРАШИВАЕМЫХПАРАМЕТРОВ );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сохраним параметр в базе/##CHR(13)##//##CHR(10)##/ DMTRADE_DEVICEID = DMTRADE_ИДУСТРОЙСТВА; /##CHR(13)##//##CHR(10)##/ RESTAPI.DMTRADE_СохранитьПараметрСоединения( "DEVICEID", DMTRADE_DEVICEID, КОДОБОРУДОВАНИЯ ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:41:31') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',19.00000000,'//Имя устройства ТСД/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "DataMobile: Мобильная торговля";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'20.11.2023 15:41:31') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль DataMobile Мобильная торговля','ТСД',0.00000000,'',0.00000000,7580.00000000,0,'',0.00000000,'','',0,'BB8A38B8-CBF9-421C-A625-0B792FEA2852',0,1,0,'20.11.2023 15:41:31') #begin #description Весы с ПЭ (драйвер ШТРИХ) #name Весы с ПЭ (драйвер ШТРИХ) #code 0000000025 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',53.00000000,'// Уничтожаем драйвер/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',52.00000000,'//Количество устройств ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = 0;/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.drvLP", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.GetCountLD( );/##CHR(13)##//##CHR(10)##/КОЛИЧЕСТВОУСТРОЙСТВ = driverSCALE.LDCount;/##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КОЛИЧЕСТВОУСТРОЙСТВ;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',40.00000000,'//Инициализация ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC driverSCALE, МаксимальноСтрокВСообщении;/##CHR(13)##//##CHR(10)##/driverSCALE = СоздатьОбъект( "AddIN.drvLP", 1 );/##CHR(13)##//##CHR(10)##/IF ( TYPE("driverSCALE") <> "O")/##CHR(13)##//##CHR(10)##/ Сообщение("Не удалось создать объект драйвера.");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/// driverSCALE.LDIndex = НомерУстройства - 1;/##CHR(13)##//##CHR(10)##/// driverSCALE.EnumLD( );/##CHR(13)##//##CHR(10)##/ driverSCALE.LDNumber = НомерУстройства;/##CHR(13)##//##CHR(10)##/ driverSCALE.SetActiveLD( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',41.00000000,'//Подготовка выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/driverSCALE.Connect( );/##CHR(13)##//##CHR(10)##/driverSCALE.beep( );/##CHR(13)##//##CHR(10)##/// Если надо очистить весы перед загрузкой, то подаем соответствующую команду/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИВЕСОВ ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //----- Если надо - очищаем память весов/##CHR(13)##//##CHR(10)##/ driverSCALE.Password = VAL( ЗАПРОС( "SELECT adm_psw FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/ driverSCALE.ClearGoodsDB( )/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',42.00000000,'//Выгрузка строки товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пропускаем товары с пустым PLU. Если PLU пустой, то, скорее всего, товар предназначен для других весов/##CHR(13)##//##CHR(10)##/IF ( EMPTY( ПЛУ ) ) RETURN true;/##CHR(13)##//##CHR(10)##/driverSCALE.PLUnumber = ПЛУ;/##CHR(13)##//##CHR(10)##/driverSCALE.Price = ЦЕНА;/##CHR(13)##//##CHR(10)##/driverSCALE.Tare = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.ItemCode = VAL( КОД );/##CHR(13)##//##CHR(10)##/driverSCALE.NameFirst = LEFT( ALLTRIM( НАИМЕНОВАНИЕ ), 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.NameSecond = SUBSTR( ALLTRIM( НАИМЕНОВАНИЕ ), 29, 28 );/##CHR(13)##//##CHR(10)##/driverSCALE.ShelfLife = СРОКГОДНОСТИ;/##CHR(13)##//##CHR(10)##/driverSCALE.GroupCode = 0;/##CHR(13)##//##CHR(10)##/driverSCALE.GoodsType = ВЕСОВОЙ;/##CHR(13)##//##CHR(10)##/driverSCALE.MessageNumber = ЕСЛИ( VAL( ПЛУ ) > driverSCALE.MessagesCount, 0, VAL( ПЛУ ) );/##CHR(13)##//##CHR(10)##/driverSCALE.SetPluDataEx( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',43.00000000,'//Окончание выгрузки таблицы товаров в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',44.00000000,'//Подготовка выгрузки таблицы сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выполним подготовительные действия/##CHR(13)##//##CHR(10)##/// Активизируем устройство/##CHR(13)##//##CHR(10)##/// Установим тип загружаемой таблицы ( сообщения )/##CHR(13)##//##CHR(10)##/// Попросим отображать индикатор хода работы/##CHR(13)##//##CHR(10)##/driverSCALE.Connect( );/##CHR(13)##//##CHR(10)##/driverSCALE.beep( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.Password = VAL( ЗАПРОС( "SELECT adm_psw FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/driverSCALE.GetStringsCountInMessage();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаксимальноСтрокВСообщении = VAL( driverSCALE.StringsCountInMessage );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.TableType = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',45.00000000,'//Выгрузка строки сообщений в ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* /##CHR(13)##//##CHR(10)##/ВХОДЯЩИЕ ПАРАМЕТРЫ/##CHR(13)##//##CHR(10)##/КОД - Строка, код товара/##CHR(13)##//##CHR(10)##/НАИМЕНОВАНИЕ - Строка, наименование товара/##CHR(13)##//##CHR(10)##/ЦЕНА - Число вещественное, цена для весов/##CHR(13)##//##CHR(10)##/ПЛУ - Строка, PLU/##CHR(13)##//##CHR(10)##/СРОКГОДНОСТИ - Число целое, срок годности в днях/##CHR(13)##//##CHR(10)##/ВЕСОВОЙ - Число целое, для выгрузки в поле wareType/##CHR(13)##//##CHR(10)##/РАЗМЕРШРИФТА - Число целое/##CHR(13)##//##CHR(10)##/ПРИМЕЧАНИЕ - Примечание из карточки товаров для печати сообщений/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( ПЛУ ) > driverSCALE.MessagesCount ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.MessageNumber = VAL( ПЛУ );/##CHR(13)##//##CHR(10)##/driverSCALE.Password = VAL( ЗАПРОС( "SELECT adm_psw FROM sprequipment WHERE code= ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##/// Удаляем все символы возврата каретки/##CHR(13)##//##CHR(10)##/mNote = STRTRAN( ПРИМЕЧАНИЕ, CHR( 10 ), "" );/##CHR(13)##//##CHR(10)##/messageNum = 1;/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= МаксимальноСтрокВСообщении AND !EMPTY( mNote ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Имем символ перевода каретки и по нему разбиваем примечание на строки/##CHR(13)##//##CHR(10)##/ crPosition = AT( mNote, CHR( 13 ) );/##CHR(13)##//##CHR(10)##/ IF ( crPosition > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = LEFT( mNote, crPosition - 1 );/##CHR(13)##//##CHR(10)##/ mNote = SUBSTR( mNote, crPosition + 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ else/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ msgLine = mNote;/##CHR(13)##//##CHR(10)##/ mNote = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Передаем строку драйверу/##CHR(13)##//##CHR(10)##/ driverSCALE.MessageString = msgLine;/##CHR(13)##//##CHR(10)##/ driverSCALE.StringNumber = messageNum;/##CHR(13)##//##CHR(10)##/ driverSCALE.SetMessageData( );/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/WHILE ( messageNum <= МаксимальноСтрокВСообщении )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Передаем пустую строку драйверу/##CHR(13)##//##CHR(10)##/ driverSCALE.MessageString = "";/##CHR(13)##//##CHR(10)##/ driverSCALE.StringNumber = messageNum;/##CHR(13)##//##CHR(10)##/ driverSCALE.SetMessageData( );/##CHR(13)##//##CHR(10)##/ messageNum++; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',46.00000000,'//Окончание выгрузки таблицы сообщений в весы ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.Disconnect();/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = driverSCALE.ResultCode != 0;/##CHR(13)##//##CHR(10)##/RETURN !_ERROR;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',47.00000000,'//Текст ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultCodeDescription;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',48.00000000,'//Признак наличия ошибки драйвера ВЕСЫ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///-- Если возникла ошибка - сообщаем о ней/##CHR(13)##//##CHR(10)##/RETURN driverSCALE.ResultCode <> 0;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',50.00000000,'//Вызов окна со свойствами драйвера/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.drvLP", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.ShowProperties( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',51.00000000,'//Имя устройства ВЕСОВ С ПЭ. /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = "";/##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##/УничтодатьОбъектДрайвера = false;/##CHR(13)##//##CHR(10)##/// Если объект драйвера уже создан, то выходим/##CHR(13)##//##CHR(10)##/IF ( ТИП( "driverSCALE" ) != "O" ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ УничтодатьОбъектДрайвера = true;/##CHR(13)##//##CHR(10)##/ driverSCALE = СоздатьОбъект( "AddIN.drvLP", 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/driverSCALE.LDindex = ИНДЕКСУСТРОЙСТВА;/##CHR(13)##//##CHR(10)##/driverSCALE.EnumLD( );/##CHR(13)##//##CHR(10)##/ИМЯУСТРОЙСТВА = driverSCALE.LDName;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( УничтодатьОбъектДрайвера )/##CHR(13)##//##CHR(10)##/ driverSCALE = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИМЯУСТРОЙСТВА;',0,0,1,0,'20.11.2023 15:41:50') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Весы с ПЭ (драйвер ШТРИХ)','ВЕСЫ',0.00000000,'',0.00000000,34.00000000,0,'',0.00000000,'','',0,'EA729A02-FE48-40A5-BD44-FE538A8A826D',0,1,0,'20.11.2023 15:41:50') #begin #description RESTAPI. Обмен данными с ATOL Sigma #name RESTAPI. Обмен данными с ATOL Sigma #code 0000000241 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'PUBLIC ИСТОЧНИКДАТЫ, ДЕЛИТЬПОККМ, ДЕЛИТЬПОКС, СКЛАДЫИЗГРУПП, ФИРМЫИЗГРУПП, СПИСОКФР,/##CHR(13)##//##CHR(10)##/КОДФРОНТ2, КОДФРОНТ3, КОДФРОНТ4, КОДФРОНТ5, КОДФРОНТ6;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN RESTAPI.АТОЛСИГМА_ЗАГРУЗИТЬПРОДАЖИ( КОДОБОРУДОВАНИЯ );',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##/IF ( !RESTAPI.АТОЛСИГМА_ВЫГРУЗИТЬКАТЕГОРИИТОВАРОВ( RESTAPI.КОДОБОРУДОВАНИЯ() ) )/##CHR(13)##//##CHR(10)##/ RETURN false; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !RESTAPI.АТОЛСИГМА_ВЫГРУЗИТЬКАТЕГОРИИУСЛУГ( RESTAPI.КОДОБОРУДОВАНИЯ() ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'//Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##///_ВЫГРУЖАТЬЕДИНИЦУ = true;/##CHR(13)##//##CHR(10)##/_ВЫГРУЖАТЬАЛКОГОЛЬ = true;/##CHR(13)##//##CHR(10)##/ПутьКФайлу = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//* отладка/##CHR(13)##//##CHR(10)##/extProductId = 123;/##CHR(13)##//##CHR(10)##/name = "Водка";/##CHR(13)##//##CHR(10)##/type = "ALCOHOL";/##CHR(13)##//##CHR(10)##/unitId = 777;/##CHR(13)##//##CHR(10)##/taxId = 10;/##CHR(13)##//##CHR(10)##/extCategoryId = 111;/##CHR(13)##//##CHR(10)##/sellPointId = 999;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///реквизиты объекта alco/##CHR(13)##//##CHR(10)##/code = "200";/##CHR(13)##//##CHR(10)##/isUnpacked = true;/##CHR(13)##//##CHR(10)##/alco = СФОРМИРОВАТЬ_VJSON("code isUnpacked");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///массив объектов items/##CHR(13)##//##CHR(10)##/price = 500.00;/##CHR(13)##//##CHR(10)##/barcodes[0] = "1234567890";/##CHR(13)##//##CHR(10)##/barcodes[1] = "4567893210";/##CHR(13)##//##CHR(10)##/itemObject = СФОРМИРОВАТЬ_VJSON("price barcodes[]");/##CHR(13)##//##CHR(10)##/itemsArray[0] = itemObject;/##CHR(13)##//##CHR(10)##/items = СФОРМИРОВАТЬ_VJSON("itemsArray", 1);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///собираем весь json/##CHR(13)##//##CHR(10)##/JSON_DATA = СФОРМИРОВАТЬ_VJSON("extProductId name type unitId taxId extCategoryId sellPointId items|array alco|object");/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ( JSON_DATA, "JSON_DATA" );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/IF ( !RESTAPI.АТОЛСИГМА_ВЫГРУЗИТЬТОВАРЫ( RESTAPI.КОДОБОРУДОВАНИЯ() ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( !RESTAPI.АТОЛСИГМА_ВЫГРУЗИТЬУСЛУГИ( RESTAPI.КОДОБОРУДОВАНИЯ() ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'//Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'20.11.2023 15:42:10') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','RESTAPI. Обмен данными с ATOL Sigma','ККМ',0.00000000,'Профиль обмена данными с ATOL Sigma через RESTAPI. Совместим с Айтида начиная с версии 4.5.3.',0.00000000,7598.00000000,0,'',0.00000000,'','',0,'3FD5EE95-8A24-41A2-B05F-84D83E92FE9B',0,1,0,'20.11.2023 15:42:10') #begin #description Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05) #name Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05) #code 0000000225 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + ЕСЛИ( ЭТОРМК, "rmk", "itida") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, СтрокаДляЗаписи);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + СтрокаИзМассива( Команда ) + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT(); /##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ КомандаВКодировке = ПЕРЕКОДИРОВАТЬ( Команда, "ANSI", "CP866", "B" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( КомандаВКодировке );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( КомандаВКодировке, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( КомандаВКодировке, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ CRC = STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = КомандаВКодировке + ЕСЛИ( ЭТОРМК, МАССИВИЗСТРОКИ( CRC ), CRC );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передаем команду в порт и получаем ответ/##CHR(13)##//##CHR(10)##/ Ответ = ""; /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(СтрокаКоманды, "СтрокаКоманды");/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ), ЕСЛИ( ЖдатьОтвета, ЗадержкаКассовыхОпераций, 0 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ЖдатьОтвета )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ КонецОжидания = TICKCOUNT() + 2000;/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 2 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND TICKCOUNT() <= КонецОжидания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций ) );/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN "00";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_Из_Любой_В_10( Значение1 , Нотация1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (Нотация1 <= 0) RETURN 0;/##CHR(13)##//##CHR(10)##/ Значение1 = ALLTRIM(Значение1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Значение1 == "0") RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Результат1 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлинаСтроки = ДЛИНА(Значение1);/##CHR(13)##//##CHR(10)##/ X=1;/##CHR(13)##//##CHR(10)##/ While (X <= ДлинаСтроки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=1;/##CHR(13)##//##CHR(10)##/ Y=1;/##CHR(13)##//##CHR(10)##/ WHILE (Y <= (ДлинаСтроки-X))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=M*Нотация1;/##CHR(13)##//##CHR(10)##/ Y++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ Результат1=Результат1+( AT( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ПОДСТРОКА(Значение1,X,1) ) - 1 )*M;/##CHR(13)##//##CHR(10)##/ X++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ROUND(Результат1, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_ИЗ_10_В_Любую( Значение2 , Нотация2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Нотация2 <= 0 ) RETURN "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = Число(Значение2);/##CHR(13)##//##CHR(10)##/ IF (Значение2 <= 0 ) RETURN "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2);/##CHR(13)##//##CHR(10)##/ Результат2="";/##CHR(13)##//##CHR(10)##/ WHILE (Значение2 > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат2 = ПОДСТРОКА( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение2 % Нотация2 +1 , 1 ) + Результат2;/##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2/Нотация2) ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат2;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = LEFT( ПечатаемаяСтрока, 72);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = Штрихкод;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+/##CHR(13)##//##CHR(10)##/ ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусФатальногоСостояния = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1);/##CHR(13)##//##CHR(10)##/ СтатусТекущихФлагов = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2);/##CHR(13)##//##CHR(10)##/ СтатусДокумента = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДокумента ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверкаСостоянияВыполнена = _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ();/##CHR(13)##//##CHR(10)##/_ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка ККМ: " + _ERRORTEXT, ФР.ИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОтменяемДокумент = false;/##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ ОтменяемДокумент = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ ОтменяемДокумент = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ОтменяемДокумент )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер смены" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ККТ_НОМЕРСМЕНЫ = НомерСмены; /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер чека" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///теперь открываем смену/##CHR(13)##//##CHR(10)##/ТекстВопроса = "В ККМ """ + ФР.ИМЯОБОРУДОВАНИЯ() + """ не открыта смена." + CHR( 13 ) + "Произвести открытие смены в ККМ?";/##CHR(13)##//##CHR(10)##/КодОтвета = СООБЩЕНИЕ( ТекстВопроса, "Открытие смены", 4 );/##CHR(13)##//##CHR(10)##/IF ( КодОтвета == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+"" + ИмяОператора + CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+150+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28) + /##CHR(13)##//##CHR(10)##/ИмяОператора + CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = "Рубли";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ Валюта + CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28) + /##CHR(13)##//##CHR(10)##/ИмяОператора + CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = "Рубли";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды + Валюта + CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = КомандыЧека.echeque;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11";/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РежимФормированияДокумента = 1; //0 - Обычный режим формирования документа, 1 - Пакетный режим формирования документа/##CHR(13)##//##CHR(10)##/ РежимПечатиРеквизитов = 0; //0 - Обычный режим печати реквизитов, 1 - Режим отложенной печати реквизитов/##CHR(13)##//##CHR(10)##/ РежимПечатиЧека = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 ); //0 - Обычный режим печати чека, 1 - Чек не печатается; Реализована , начиная с версий 565.1.13 и 665.4.13/##CHR(13)##//##CHR(10)##/ ТипДокументаДвоичный = ALLTRIM( STR( ТипДокумента, 4, 0, true, false, 2) );/##CHR(13)##//##CHR(10)##/ ТипИРежимДокументаФлаги = STR(РежимПечатиЧека,1,0,true,true) + "0" + STR(РежимПечатиРеквизитов,1,0,true,true) + "" +/##CHR(13)##//##CHR(10)##/ STR(РежимФормированияДокумента,1,0,true,true) + STR(ТипДокументаДвоичный,1,0,true,false);/##CHR(13)##//##CHR(10)##/ ТипИРежимДокумента = VAL( ТипИРежимДокументаФлаги, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "ТипДокументаДвоичный = " + ТипДокументаДвоичный + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипИРежимДокументаФлаги = " + ТипИРежимДокументаФлаги + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипИРежимДокумента = " + ТипИРежимДокумента, "Проверка типа докумнета");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипИРежимДокумента+CHR(28)+НомерСекции+CHR(28)+ /##CHR(13)##//##CHR(10)##/ ИмяОператора + CHR(28)+НомерДокумента+CHR(28)+ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если значение GTIN получается меньше 6 байт то дополняет до 6 байт (в нашем случае строка, поэтому дополняем до 12 символов)/##CHR(13)##//##CHR(10)##/ GTINHEX = RIGHT( "000000000000" + GTINHEX, 12);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды + КОДТОВАРНОЙНОМЕНКЛАТУРЫ+/##CHR(13)##//##CHR(10)##/ CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( ALLTRIM( КомандыЧека.name ), 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара + /##CHR(13)##//##CHR(10)##/ CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+ КодНалогаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+/##CHR(13)##//##CHR(10)##/ СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = STR( ROUND( КомандыЧека.price, 2 ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА ); /##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя +/##CHR(13)##//##CHR(10)##/ CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 1000;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, ТекстЧека, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ ',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПробитияЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатПробитияЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РезультатПробитияЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатПробитияЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 1000;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 1000;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" OR КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены /##CHR(13)##//##CHR(10)##/ IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Статус = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусФатальногоСостояния = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1);/##CHR(13)##//##CHR(10)##/ СтатусТекущихФлагов = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДокумента = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДокумента ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СтатусТекущихФлагов <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии = "";/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ Вики_ФЛАГИСТАТУСАДОКУМЕНТА = RIGHT( "0000000000" + Перевести_ИЗ_10_В_Любую( СтатусТекущихФлагов, 2 ), 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НеобходимоНачалоРаботы = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 10, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НеобходимоНачалоРаботы ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Необходимо передать конду начала работы" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НефискальныйРежим = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 9, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НефискальныйРежим ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "ККТ работает в нефискальном режиме" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_СменаОткрыта = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 8, 1 );/##CHR(13)##//##CHR(10)##/ Статус = VAL( Вики_СменаОткрыта ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_СменаБольше24Часов = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 7, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_СменаБольше24Часов ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Смена превысила 24. Необродимо произвести закрытие смены" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_АрхивФНЗакрыт = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 6, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_АрхивФНЗакрыт ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Архив ФН закрыт. Работа с ККТ невозможна." + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_ФННеЗарегистрирован = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 5, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_ФННеЗарегистрирован ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "ККТ не зарегистрирована. Произведите регистрацию ККТ" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НеЗавершеноЗакрытиеСмены = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 2, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НеЗавершеноЗакрытиеСмены ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Не завершена операция закрытия смены. Произведите закрытие смены ещё раз" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_ОшибкаКонтрольнойЛенты = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 1, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_ОшибкаКонтрольнойЛенты ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Ошибка контрольной ленты ККТ" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Вики_СообщениеОСостоянии ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии = "Статус ККТ: " + СимвПС + СимвПС + Вики_СообщениеОСостоянии;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(Вики_СообщениеОСостоянии, "Вики принт");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN Статус;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПортаККТ = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПортаККТ;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( КомандыЧека.name, 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( КомандыЧека.name, 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05)','ФР',0.00000000,'',0.00000000,7562.00000000,0,'',0.00000000,'','',0,'47561693-4CDE-4954-8D3F-168D35D00FD4',0,1,0,'10.01.2024 10:09:02') #begin #description Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #name Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ #code 0000000226 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',95.00000000,'//Взнос наличными./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "I";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "4"; //внесение/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28) + /##CHR(13)##//##CHR(10)##/ИмяОператора + CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВНЕСЕНИЕ/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = "Рубли";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ Валюта + CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',132.00000000,'//Возврат аванса из РКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( КомандыЧека.name, 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для РКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Приходная накладная - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет" ("передача в кредит" ???, "оплата кредита" ???)/##CHR(13)##//##CHR(10)##///Возврат товаров от покупателя - РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "полный расчет"/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (входящий) - РКО: Признак расчета: "РАСХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///ПКО - РКО (или равносильно "одинокий РКО"): Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета: "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##///одинокий РКО: Признак расчета: "ВОЗВРАТ ПРИХОДА". Способ расчета "аванс/предоплата" (возврат аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##/КодДокументаВозвратПокупателя = "006"; //возврат товаров от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаПоступление = "001"; //поступление товаров/##CHR(13)##//##CHR(10)##/КодДокументаАкт = "049"; //акт приема/передачи услуг (входящий)/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаВозвратПокупателя + Разделитель + КодДокументаПоступление + Разделитель + КодДокументаАкт;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокумента = ""; //для определения типа кассового чека/##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если РКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''016'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT outtype FROM spr016 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///З/П и БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный РКО на основании Приходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт выдачи денежных стредств при получении товаров (факту оказания услуг) или оплате кредита за принятый ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''016'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''016'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##/КодДокумента = ЕСЛИ(!ПУСТО(КодНакладной), КодНакладной, КодДокументаОснования);/##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из РКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ КодДокумента = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании товарной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaRKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''016'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaRKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr016 s16 ON s16.identity_column = cl.cr_ic/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s16.identity_column/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''016'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND s16.outtype = ''Оплата'') )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = @SummaPaymentTotal - @SummaPayment;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыРКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaRKOSalePayment AS СуммаОплатыРКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаРКО = Оплаты.СуммаОплатыРКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыРКОПоНакладной = Оплаты.СуммаОплатыРКОПоНакладной; //сумма оплат, произведенных кассовыми ордерами, сформированными на основании накладной/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, произведенных ранее и сопоставленных с накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплаты по данному РКО/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по РКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО == СуммаОплатыРКОПоНакладной OR СуммаРКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыРКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты РКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по РКО или сумма полученных предоплат и сумма РКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаРКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодНакладной=="001","linenum","npp") + ", nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="006", 1, 4 ); //если на основании возврата от покупателя, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из РКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в РКО выбрали полный расчет, а сумма РКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из РКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаРКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ РКОНААванс = false; //признак того что РКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаРКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если РКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в РКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ РКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //РКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по РКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаРКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаРКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаРКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по РКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаРКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT " + ЕСЛИ(КодДокументаОснования=="001","linenum","npp") + ",/##CHR(13)##//##CHR(10)##/ nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по РКО. Если превышает, распределим сумму РКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из РКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаРКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаРКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаРКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаРКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из РКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаРКО + ", " + СуммаРКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентРКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодДокумента=="006" OR ПУСТО( КодДокумента ) OR КодДокумента=="023", 1, 4 ); //если на основании возврата от покупателя, ПКО или пробиваем одинокий ордер, то "возврат прихода", иначе "расход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентРКО = ЗАПРОС("SELECT client FROM spr016 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентРКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr016 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Выдано " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по РКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаРКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаРКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''016'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код инициализируемого ФР в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерУстройства число целое. Номер устройстваиз карточки оборудования/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ //определим расположение файла лога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПОКРУЖЕНИЯ("appdata");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПутьДоФайла))/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "C:\Users\Public\Documents";/##CHR(13)##//##CHR(10)##/ //на всякий случай проверим существование каталога/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла, 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога в системе, то будем далее пытаться писать в каталог с Айтидой/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог есть в системе, то проверим наличие вложенного каталога Itida/##CHR(13)##//##CHR(10)##/ IF ( !ФАЙЛ(ПутьДоФайла + "\Itida", 1) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если нет каталога Itida, то создадим его/##CHR(13)##//##CHR(10)##/ IF ( КАТАЛОГСОЗДАТЬ(ПутьДоФайла + "\Itida") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если каталог создался, то меняем полный путь с учетом созданного каталога/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПутьДоФайла = ПутьДоФайла + "\Itida";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ПутьДоФайла + ЕСЛИ(ПУСТО(ПутьДоФайла),"","\") + ЕСЛИ( ЭТОРМК, "rmk", "itida") + "kkt_dreamkas_log" + КОДОБОРУДОВАНИЯ + ".txt";/##CHR(13)##//##CHR(10)##/ RETURN ВИКИ_ИмяФайлаЛога;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ЗаписатьСтрокуЛога(СтрокаДляЗаписи)/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ВИКИ_ИмяФайлаЛога))/##CHR(13)##//##CHR(10)##/ ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( FILEEXISTS(ВИКИ_ИмяФайлаЛога) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛОТКРЫТЬ(ВИКИ_ИмяФайлаЛога, 0, 1);/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ(ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ(ВИКИ_ИмяФайлаЛога);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла <> -1 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ(ДескрипторФайла, СтрокаДляЗаписи);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ(ДескрипторФайла);/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ СформироватьКомандуДляККМ( Команда )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало формирования команды для ККМ " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Исходная команда: " + СтрокаИзМассива( Команда ) + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT(); /##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = "";/##CHR(13)##//##CHR(10)##/ КомандаВКодировке = ПЕРЕКОДИРОВАТЬ( Команда, "ANSI", "CP866", "B" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расчет CRC/##CHR(13)##//##CHR(10)##/ Длина = ДЛИНА( КомандаВКодировке );/##CHR(13)##//##CHR(10)##/ Текущий = ЭЛЕМЕНТ( КомандаВКодировке, 1 );/##CHR(13)##//##CHR(10)##/ FOR ( index = 2; index < Длина ; index++ ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Текущий ^= ЭЛЕМЕНТ( КомандаВКодировке, index );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //команда + CRC/##CHR(13)##//##CHR(10)##/ CRC = STR( Текущий, 2, 0, true, false, 16 );/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = КомандаВКодировке + ЕСЛИ( ЭТОРМК, МАССИВИЗСТРОКИ( CRC ), CRC );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Окончание формирования команды для ККМ " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Команда + CRC: " + КомандаДляККМ + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN КомандаДляККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПередатьКомандуВПорт(НомерПорта, СтрокаКоманды,ИДКоманды,НомерКоманды,ЗадержкаКассовыхОпераций, ЖдатьОтвета)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Начало передачи команды в порт " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Открытие порта кассы " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если порт занят, попытаемся сперва его закрыть и открыть повторно/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ Порт = COMОТКРЫТЬ( "COM" + НомерПорта + ",57600,8,N,O,N", ЕСЛИ(!ПУСТО(ВИКИ_ИмяФайлаЛога), ВИКИ_ИмяФайлаЛога, "") );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если закрытие и повторное открытие не удалось, то выводим ошибку/##CHR(13)##//##CHR(10)##/ IF ( Порт == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Невозможно открыть порт COM"+НомерПорта;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(_ERRORTEXT); /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //передаем команду в порт и получаем ответ/##CHR(13)##//##CHR(10)##/ Ответ = ""; /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(СтрокаКоманды, "СтрокаКоманды");/##CHR(13)##//##CHR(10)##/ COMЗАПИСАТЬ( Порт, МАССИВИЗСТРОКИ( СтрокаКоманды ), ЕСЛИ( ЖдатьОтвета, ЗадержкаКассовыхОпераций, 0 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда передана в кассу " + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ЖдатьОтвета )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=0;/##CHR(13)##//##CHR(10)##/ КонецОжидания = TICKCOUNT() + 2000;/##CHR(13)##//##CHR(10)##/ //ждем ответа от ККМ в цикле, но не дольше 2 секунд/##CHR(13)##//##CHR(10)##/ WHILE ( ПУСТО(Ответ) AND TICKCOUNT() <= КонецОжидания)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Получен ответ от кассы: " + Ответ + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //обрабатываем ответ/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, CHR(2), "");/##CHR(13)##//##CHR(10)##/ Ответ = STRTRAN(Ответ, ИДКоманды+""+НомерКоманды, "");/##CHR(13)##//##CHR(10)##/ Ответ = LEFT(Ответ, ATC(Ответ, CHR(3)) - 1 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (_ВИКИ_ВЕСТИЛОГ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаЛога = ALLTRIM( ДАТАВРЕМЯ() ) + " Команда: " + СтрокаКоманды + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Ответ: " + Ответ + CHR(13) +/##CHR(13)##//##CHR(10)##/ REPLICATE(" ",17) + " Т (мс): " + TICKCOUNT();/##CHR(13)##//##CHR(10)##/ ЗаписатьСтрокуЛога(СтрокаЛога);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ответ = СтрокаИзМассива( COMПРОЧИТАТЬ( Порт, -1, ЗадержкаКассовыхОпераций ) );/##CHR(13)##//##CHR(10)##/ //закрываем порт /##CHR(13)##//##CHR(10)##/ COMЗАКРЫТЬ( Порт );/##CHR(13)##//##CHR(10)##/ RETURN "00";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_Из_Любой_В_10( Значение1 , Нотация1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (Нотация1 <= 0) RETURN 0;/##CHR(13)##//##CHR(10)##/ Значение1 = ALLTRIM(Значение1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (Значение1 == "0") RETURN 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Результат1 = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДлинаСтроки = ДЛИНА(Значение1);/##CHR(13)##//##CHR(10)##/ X=1;/##CHR(13)##//##CHR(10)##/ While (X <= ДлинаСтроки)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=1;/##CHR(13)##//##CHR(10)##/ Y=1;/##CHR(13)##//##CHR(10)##/ WHILE (Y <= (ДлинаСтроки-X))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ M=M*Нотация1;/##CHR(13)##//##CHR(10)##/ Y++;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ Результат1=Результат1+( AT( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ПОДСТРОКА(Значение1,X,1) ) - 1 )*M;/##CHR(13)##//##CHR(10)##/ X++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN ROUND(Результат1, 0);/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Перевести_ИЗ_10_В_Любую( Значение2 , Нотация2 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Нотация2 <= 0 ) RETURN "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = Число(Значение2);/##CHR(13)##//##CHR(10)##/ IF (Значение2 <= 0 ) RETURN "0";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2);/##CHR(13)##//##CHR(10)##/ Результат2="";/##CHR(13)##//##CHR(10)##/ WHILE (Значение2 > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Результат2 = ПОДСТРОКА( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение2 % Нотация2 +1 , 1 ) + Результат2;/##CHR(13)##//##CHR(10)##/ Значение2 = ЦЕЛОЕ(Значение2/Нотация2) ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN Результат2;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВернутьТекстОшибкиККМ(КодОшибки)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Ошибки выполнения команд/##CHR(13)##//##CHR(10)##/ IF ( КодОшибки == "01" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Функция невыполнима при данном статусе ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "02" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В команде указан неверный номер функции";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "03" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды";/##CHR(13)##//##CHR(10)##/ } //Ошибки протокола передачи данных/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "04" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Переполнение буфера коммуникационного порта";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "05" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Таймаут при передаче байта информации";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "06" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "В протоколе указан неверный пароль";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "07" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной суммы в команде";/##CHR(13)##//##CHR(10)##/ } //Ошибки печатающего устройства/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "08" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Конец бумаги";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "09" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Принтер не готов";/##CHR(13)##//##CHR(10)##/ }//Ошибки даты/времени/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0A" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Текущая смена больше 24 часов." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Установка даты времени больше чем на 24 часа.";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0B" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Разница во времени, ККТ и указанной в команде начала работы, больше 8 минут";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0C" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Вводимая дата более ранняя, чем дата последней фискальной операции";/##CHR(13)##//##CHR(10)##/ }//Прочие ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0D" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверный пароль доступа к ККТ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0E" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Отрицательный результат";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "0F" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Для выполнения команды необходимо закрыть смену";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "10" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "11" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка контрольной ленты";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "13" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Не соответствие сумм";/##CHR(13)##//##CHR(10)##/ }//Фатальные ошибки/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "20" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Фатальная ошибка ККТ." + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Причины возникновения данной ошибки можно уточнить в ""Статусе фатальных ошибок""";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "21" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }//Ошибки ФН/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "41" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректный формат или параметр команды ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "42" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректное состояние ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "44" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка КС (Криптографического сопроцессора) в составе ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "45" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан временной ресурс использования ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "46" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "ФН переполнен";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "47" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверные дата или время";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "48" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет запрошенных данных";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Некорректные параметры команды";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "50" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Превышен размер данных TLV";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "51" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет транспортного соединения";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "52" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпан ресурс КС (Криптографического сопроцессора)";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "54" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Исчерпана память хранения документов для ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "60" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неверное сообщение от ОФД";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "61" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Нет связи с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "62" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Ошибка обмена с ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодОшибки == "63" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Слишком длинная команда для посылки в ФН";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "Неизвестная ошибка ККМ";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТекстОшибки = "(" + КодОшибки + ") " + ТекстОшибки;/##CHR(13)##//##CHR(10)##/ RETURN ТекстОшибки;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьСтроки( ПечатаемаяСтрока )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "P";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "40";/##CHR(13)##//##CHR(10)##/ СтрокаДляПечати = LEFT( ПечатаемаяСтрока, 72); /##CHR(13)##//##CHR(10)##/ АтрибутыПечати = "0"; //битовая маска/##CHR(13)##//##CHR(10)##/ //0..3 бит - Номер шрифта/##CHR(13)##//##CHR(10)##/ //Номер шрифта Пояснение/##CHR(13)##//##CHR(10)##/ //0 Шрифт 12х24/##CHR(13)##//##CHR(10)##/ //1 Шрифт 9х17/##CHR(13)##//##CHR(10)##/ //4 бит - Печать двойной высоты текста/##CHR(13)##//##CHR(10)##/ //5 бит - Печать двойной ширины текста/##CHR(13)##//##CHR(10)##/ //Для передаваемого поумолчанию значения "1" битовая маска выглядит следующим образом 0000 0000. Двойная высота = 0, Двойная ширина = 0, Шрифт = 0 (12*24)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+СтрокаДляПечати+CHR(28)+АтрибутыПечати+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать строки" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПечатьШтрихкода( ВыводТекста, ШиринаШтрихкода, ВысотаШтрихкода, ТипШтрихкода, Штрихкод )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //ВыводТекста = 0; //0-не выводить; 1-вывести наверху штрих-кода; 2-вывести внизу; 3-вывести наверху и внизу;/##CHR(13)##//##CHR(10)##/ //ШиринаШтрихкода = 4; //значение задается в точках и может быть от 2 до 8./##CHR(13)##//##CHR(10)##/ //Для UPC-A и EAN-13 максимальная ширина штрих-кода = 6, для остальных кодов зависит от длины параметра “Штрих-код”./##CHR(13)##//##CHR(10)##/ //ВысотаШтрихкода = 0; //значение задается в точках и может принимать значения от 1 до 255 (только для линейных кодов)./##CHR(13)##//##CHR(10)##/ //ТипШтрихкода = 8; //0 - UPC-A; 1 - UPC-E; 2 - EAN-13; 3 - EAN-8; 4 - Code 39; 5 - Interleaved 2 of 5; 6 - Codabar; 7 – PDF417; 8 – QR CODE./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ ИДКоманды = "B";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "41";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ШтрихкодДляПечати = Штрихкод; /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ВыводТекста+CHR(28)+ШиринаШтрихкода+CHR(28)+/##CHR(13)##//##CHR(10)##/ ВысотаШтрихкода+CHR(28)+ТипШтрихкода+CHR(28)+ШтрихкодДляПечати+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("печать штрихкода" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /* /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_НАЧАЛО_РАБОТЫ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "10";/##CHR(13)##//##CHR(10)##/ ДатаТекущая = ДАТАВРЕМЯ();/##CHR(13)##//##CHR(10)##/ СтрокаДаты = RIGHT( "00" + ДЕНЬ( ДатаТекущая ), 2) + RIGHT( "00" + МЕСЯЦ( ДатаТекущая ), 2) + RIGHT( "00" + ГОД( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ СтрокаВремени = RIGHT( "00" + ЧАС( ДатаТекущая ), 2) + RIGHT( "00" + МИНУТА( ДатаТекущая ), 2) + RIGHT( "00" + СЕКУНДА( ДатаТекущая ), 2);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //команда начала работы с ККМ/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+СтрокаДаты+CHR(28)+СтрокаВремени+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( Ответ == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = "Не удалось начать работу с ККМ. Возможно устройство выключено или некорректно указан номер порта в карточке торгового оборудования.";/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусФатальногоСостояния = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1);/##CHR(13)##//##CHR(10)##/ СтатусТекущихФлагов = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2);/##CHR(13)##//##CHR(10)##/ СтатусДокумента = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДокумента ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //04 - НДС 18% 1 - НДС 18% (0)/##CHR(13)##//##CHR(10)##/ //01 - НДС 10% 2 - НДС 10% (1)/##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% (2)/##CHR(13)##//##CHR(10)##/ //05 - Без НДС 4 - без НДС (3)/##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% (4)/##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% (5)/##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''01'', 2, ЕСЛИ( КодНалогаАйтида == ''04'', 1, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Справка по таблице налогов/##CHR(13)##//##CHR(10)##/ //Налоги в Айтиде Налоги в ККМ /##CHR(13)##//##CHR(10)##/ //05 - НДС 18% 1 - НДС 18% /##CHR(13)##//##CHR(10)##/ //02 - НДС 10% 2 - НДС 10% /##CHR(13)##//##CHR(10)##/ //06 - НДС 0% 3 - НДС 0% /##CHR(13)##//##CHR(10)##/ //01 - Без НДС 4 - без НДС /##CHR(13)##//##CHR(10)##/ // 5 - НДС 18/118% /##CHR(13)##//##CHR(10)##/ // 6 - НДС 10/110% /##CHR(13)##//##CHR(10)##/ КодНалогаВККМ = ЕСЛИ( КодНалогаАйтида == ''05'', 1, ЕСЛИ( КодНалогаАйтида == ''02'', 2, ЕСЛИ( КодНалогаАйтида == ''06'', 3, 4 ) ) );/##CHR(13)##//##CHR(10)##/ RETURN КодНалогаВККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧекаАйтида, ЭтоЧекКоррекции )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##/ //Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##/ //Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##/ //Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##/ //Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ТипЧекаАйтида == 0 ) //"Продажа"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 1 ) //"Возврат"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 4 ) //"Расход"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 5 ) //"Возврат расхода"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧекаАйтида == 6 ) //"Прочее/Вскрытие тары"/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 1; //сервисный документ, для печати нефискальных чеков /##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ КодВидаЧека = 2; //по умолчанию возвращаем Продажу (приход)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN КодВидаЧека;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Обявляем глобальную переменную, в которой будет хранится объект драйвера /##CHR(13)##//##CHR(10)##/// Это необходимо сделать, т.к. локальные переменные могут быть удалены в процессе работы системы/##CHR(13)##//##CHR(10)##/PUBLIC ИНДЕКСУСТРОЙСТВАККМ, _ИМЯКАССИРА, _ТИПДОКУМЕНТАОСНОВАНИЯ, _ИДДОКУМЕНТАОСНОВАНИЯ, _ПЕЧАТАТЬНАЛОГИ, _ПЕЧАТАТЬСКИДКИ, _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ, _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/PUBLIC ВСЕГОБЕЗНАЛ, ВСЕГОНАЛ, ВСЕГОКРЕДИТ, ВСЕГОСЕРТИФИКАТЫ, ВСЕГОПРОЧАЯОПЛАТА, ВСЕГОСКИДКА, ККТ_НОМЕРЧЕКА, ККТ_НОМЕРСМЕНЫ, ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/PUBLIC ComPort, Команда, CRC, CRC10, CRC16, ПарольУстройства, ЗадержкаКассовыхОпераций, НомерПорта;/##CHR(13)##//##CHR(10)##/PUBLIC ККТ_КодВидаОплатыНаличные, ККТ_КодВидаОплатыБезналичные, ККТ_КодВидаОплатыПредоплата, ККТ_КодВидаОплатыКредит, ККТ_КодВидаОплатыПрочее;/##CHR(13)##//##CHR(10)##/PUBLIC _КОЛИЧЕСТВОКОПИЙСЛИПА, _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА, TerminalNumber;/##CHR(13)##//##CHR(10)##/PUBLIC _ERROR, _ERRORTEXT, _ВИКИ_ВЕСТИЛОГ, ВИКИ_ИмяФайлаЛога, ИмяТаблицыСтрокСлипа;/##CHR(13)##//##CHR(10)##/// Запоминаем номер устройства/##CHR(13)##//##CHR(10)##/_ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ = false; //по умолчанию не будем определять коды налогов из доп. кодов справочника "Коды налогов"./##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ПарольУстройства = "PIRI"; //стандартный пароль для ККМ Вики Принт и Пирит/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100; //таймаут ожидания ответа от устройства/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///коды видов оплат в ККМ/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыНаличные = 0;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыБезналичные= 1;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПредоплата = 13;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыКредит = 14;/##CHR(13)##//##CHR(10)##/ККТ_КодВидаОплатыПрочее = 15;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///переменные для платежной системы/##CHR(13)##//##CHR(10)##/TerminalNumber = 1; // Номер платежного терминала в драйвере/##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = 50; //количество символов в строке на чековой ленте/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОКОПИЙСЛИПА = 1; //число копий банковских слипов (по умолчанию 1)/##CHR(13)##//##CHR(10)##/_КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА = 0; //количество пропускаемых строк перед отрезкой банковского слипа (используется, если слипы отрезаются не ровно)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ERROR = false;/##CHR(13)##//##CHR(10)##/_ERRORTEXT = "";/##CHR(13)##//##CHR(10)##/_ВИКИ_ВЕСТИЛОГ = true;/##CHR(13)##//##CHR(10)##/ВИКИ_ИмяФайлаЛога = ВИКИ_ИМЯФАЙЛАЛОГИРОВАНИЯ();/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверкаСостоянияВыполнена = _ВИКИ_ПРОВЕРКА_СОСТОЯНИЯ_ККМ();/##CHR(13)##//##CHR(10)##/_ВИКИ_НАЧАЛО_РАБОТЫ();/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN !_ERROR; /##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/// Если несколько ФР, то надо определить номер активируемого устройства/##CHR(13)##//##CHR(10)##/ИНДЕКСУСТРОЙСТВАККМ = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE code= ''" + fr_code + "''" );/##CHR(13)##//##CHR(10)##/НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ИДКоманды = "A";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( "Ошибка ККМ: " + _ERRORTEXT, ФР.ИМЯОБОРУДОВАНИЯ() );/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОтменяемДокумент = false;/##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ ОтменяемДокумент = true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ ОтменяемДокумент = true;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ОтменяемДокумент )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///команда проверки состояния принтера ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "04";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false OR ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',108.00000000,'// Отмена чека/##CHR(13)##//##CHR(10)##///сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ИДКоманды = "S";/##CHR(13)##//##CHR(10)##/СтатусДок = 0;/##CHR(13)##//##CHR(10)##/НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДКоманды = "A";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',109.00000000,'// Оплата со сдачей/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПробитияЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатПробитияЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',110.00000000,'// ШиринаЛенты./##CHR(13)##//##CHR(10)##/// Ширина стандартная 27 символов/##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ШиринаЛенты = 40;/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( ККТ_ШИРИНАЛЕНТЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "02";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "18";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN ШиринаЛенты;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT( Ответ, 2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ШиринаЛенты = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ElSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ККТ_ШИРИНАЛЕНТЫ = ШиринаЛенты;/##CHR(13)##//##CHR(10)##/RETURN ШиринаЛенты;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',139.00000000,'//Отмена незавершенного чека./##CHR(13)##//##CHR(10)##/RETURN false;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',111.00000000,'// Печать строки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Строка строка для печати,/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, name )/##CHR(13)##//##CHR(10)##/ VALUES ( ''PRINTSTRING'', ''" + STDF( СтрокаДляПечати ) + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',114.00000000,'//Печать X отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "X";/##CHR(13)##//##CHR(10)##/НомерКоманды = "20";/##CHR(13)##//##CHR(10)##///команда Х-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 1000;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',115.00000000,'//Печать Z отчета./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "V";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "O";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется. /##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "G";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ ОтветОтрезки = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функции для для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ДобавитьДанныеВОтчет ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.BeginReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "БанковскиеОперации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepAuthCode = БанковскиеОперации.AuthCode;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepOperationType = БанковскиеОперации.OperationType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransType = БанковскиеОперации.TransType;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSum = БанковскиеОперации.Sum;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepCardNumber = БанковскиеОперации.CardNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepSlipNumber = БанковскиеОперации.SlipNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransDate = БанковскиеОперации.TransDate;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTransTime = БанковскиеОперации.TransTime;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepMsgNumber = БанковскиеОперации.MsgNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepTerminalID = БанковскиеОперации.TerminalID;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepReferenceNumber = БанковскиеОперации.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.RepResponseCode = БанковскиеОперации.ResponseCode;/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.AddToReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.EndReport() ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстВопроса = "Вы действительно хотите снять Z-отчет?";/##CHR(13)##//##CHR(10)##/IF ( MESSAGEBOX(ТекстВопроса,"ВОПРОС",4) == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Закрытие банковского дня при наличии безналичных платежей/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM paycardtrans ORDER BY identity_column", "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##/IF ( КОЛИЧЕСТВОСТРОК( "БанковскиеОперации" ) > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReportType = 0;/##CHR(13)##//##CHR(10)##/ IF ( !ДобавитьДанныеВОтчет() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.ResetState();/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Ошибка при закрытии банковского дня" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DELETE FROM paycardtrans" );/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ИмяТаблицыСтрокСлипа ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "БанковскиеОперации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "Z";/##CHR(13)##//##CHR(10)##/НомерКоманды = "21";/##CHR(13)##//##CHR(10)##///команда Z-отчет/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 1000;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ((LEFT(ALLTRIM(Ответ),2) <> "00") AND (LEFT(ALLTRIM(Ответ),2) <> "0") AND (LEFT(ALLTRIM(Ответ),2) <> ""))/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',116.00000000,'//Печать прочих отчетов./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///IF ( ( ТипОтчета >= 7 AND ТипОтчета <= 9 ) OR ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/IF ( ВСПИСКЕ( ТипОтчета, 41, 42 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( НомерПорта ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСТВАККМ = НомерУстройства; /##CHR(13)##//##CHR(10)##/ НомерПорта = VAL(ИНДЕКСУСТРОЙСТВАККМ); //номер порта из карточки торгового оборудования/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "R";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ТипОтчета == 41) //копия последнего документа/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "A3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF (ТипОтчета == 42) //отчет о состоянии расчетов/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = 59;/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+ИмяОператора+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ MessageBox( "Выбранный отчет (код " + ТипОтчета + ") не поддерживается ККМ." );',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',117.00000000,'//Получение статуса./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодСтатуса строка, определяющая статус, значение которого необходимор вернуть./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Статус = 0;/##CHR(13)##//##CHR(10)##/IF ( КодСтатуса == "SESSION" OR КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ //если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/ IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусСмены = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим статус смены /##CHR(13)##//##CHR(10)##/ IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ ИДКоманды = "F";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ RETURN 0;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КодСтатуса == "SESSION" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Статус = НомерСменыККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КодСтатуса == "SESSIONOPENED" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатусФатальногоСостояния = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1);/##CHR(13)##//##CHR(10)##/ СтатусТекущихФлагов = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДокумента = ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДокумента ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СтатусТекущихФлагов <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии = "";/##CHR(13)##//##CHR(10)##/ СимвПС = CHR(13) + CHR(10);/##CHR(13)##//##CHR(10)##/ Вики_ФЛАГИСТАТУСАДОКУМЕНТА = RIGHT( "0000000000" + Перевести_ИЗ_10_В_Любую( СтатусТекущихФлагов, 2 ), 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НеобходимоНачалоРаботы = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 10, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НеобходимоНачалоРаботы ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Необходимо передать конду начала работы" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НефискальныйРежим = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 9, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НефискальныйРежим ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "ККТ работает в нефискальном режиме" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_СменаОткрыта = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 8, 1 );/##CHR(13)##//##CHR(10)##/ Статус = VAL( Вики_СменаОткрыта ) <> 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_СменаБольше24Часов = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 7, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_СменаБольше24Часов ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Смена превысила 24. Необродимо произвести закрытие смены" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_АрхивФНЗакрыт = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 6, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_АрхивФНЗакрыт ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Архив ФН закрыт. Работа с ККТ невозможна." + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_ФННеЗарегистрирован = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 5, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_ФННеЗарегистрирован ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "ККТ не зарегистрирована. Произведите регистрацию ККТ" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_НеЗавершеноЗакрытиеСмены = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 2, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_НеЗавершеноЗакрытиеСмены ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Не завершена операция закрытия смены. Произведите закрытие смены ещё раз" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Вики_ОшибкаКонтрольнойЛенты = ПОДСТРОКА( Вики_ФЛАГИСТАТУСАДОКУМЕНТА, 1, 1 );/##CHR(13)##//##CHR(10)##/ IF ( VAL( Вики_ОшибкаКонтрольнойЛенты ) == 1 )/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии += "Ошибка контрольной ленты ККТ" + СимвПС;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( Вики_СообщениеОСостоянии ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Вики_СообщениеОСостоянии = "Статус ККТ: " + СимвПС + СимвПС + Вики_СообщениеОСостоянии;/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ(Вики_СообщениеОСостоянии, "Вики принт");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN Статус;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',122.00000000,'//Текст ошибки драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN _ERRORTEXT;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',123.00000000,'//Последняя ошибка драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 0;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',124.00000000,'//Признак наличия ошибки ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN _ERROR == true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN "Вики Принт / Пирит";',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',87.00000000,'//Открытие смены ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///теперь открываем смену/##CHR(13)##//##CHR(10)##/ТекстВопроса = "В ККМ """ + ФР.ИМЯОБОРУДОВАНИЯ() + """ не открыта смена." + CHR( 13 ) + "Произвести открытие смены в ККМ?";/##CHR(13)##//##CHR(10)##/КодОтвета = СООБЩЕНИЕ( ТекстВопроса, "Открытие смены", 4 );/##CHR(13)##//##CHR(10)##/IF ( КодОтвета == 7 ) //если нажали "Нет"/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "23";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+"" + ИмяОператора + CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',92.00000000,'//Открыть денежный ящик./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/НомерКоманды = "80";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///команда открытия смены в ККМ/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+""+150+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///если не ожидаем ответ, то должно вернуться true/##CHR(13)##//##CHR(10)##/IF (Ответ == true)/##CHR(13)##//##CHR(10)##/ RETURN Ответ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегестрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN 99;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',129.00000000,'//Окончание работы с ФР./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',83.00000000,'//Номер смены в ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРСМЕНЫ <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерСмены = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер смены" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ККТ_НОМЕРСМЕНЫ = НомерСмены; /##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер смены: "+НомерСмены);/##CHR(13)##//##CHR(10)##/RETURN НомерСмены;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// В связи с тем, что метод может быть вызван до инициализации драйвера (из карточки оборудования)/##CHR(13)##//##CHR(10)##/// надо обработать ситуацию, когда объект драйвера еще не создан/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстНастройки = "Данный профиль оборудования не требует отдельной настройки драйверов."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Подключите ККМ через USB кабель и установите драйвер виртуального COM порта, либо подключите ККМ напрямую к COM порту (при наличии)."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Если предполагается передача данных в ОФД, то настройте виртуальный COM порт в утилите COMProxy. В результате получите новый виртуальный COM порт для связи с ККМ."+CHR(13)+/##CHR(13)##//##CHR(10)##/"Скорость COM порта должна быть задана равной 57600. Остальные настройки COM порта оставить по умолчанию."+CHR(13)+/##CHR(13)##//##CHR(10)##/""+CHR(13)+/##CHR(13)##//##CHR(10)##/"Выберите полученный номер COM порта в карточке оборудования в поле ""Устройство""";/##CHR(13)##//##CHR(10)##/Сообщение(ТекстНастройки);/##CHR(13)##//##CHR(10)##/',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства ФР./##CHR(13)##//##CHR(10)##/НомерПортаККТ = VAL(ИНДЕКСУСТРОЙСТВА + 1);/##CHR(13)##//##CHR(10)##/RETURN "COM"+НомерПортаККТ;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',84.00000000,'//Номер чека в ФР./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ККТ_НОМЕРЧЕКА <> 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/НомерЧека = 0;/##CHR(13)##//##CHR(10)##///проверим статус смены/##CHR(13)##//##CHR(10)##///для этого запросим эту информацию из ФН/##CHR(13)##//##CHR(10)##/ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("номер чека" + " / " + ответ);/##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///ККТ_НОМЕРЧЕКА = НомерЧека;/##CHR(13)##//##CHR(10)##///СООБЩЕНИЕ("Номер чека: "+НомерЧека);/##CHR(13)##//##CHR(10)##/RETURN НомерЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',130.00000000,'//Получить возраст ФН./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ВозврастБуфераДней = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "W";/##CHR(13)##//##CHR(10)##///команда проверки состояния ККМ/##CHR(13)##//##CHR(10)##/НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/НомерЗапроса = "7";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, ЕСЛИ( ПЕРЕМЕННАЯ("ЭЛЕКТРОННЫЙЧЕК", false ) AND ЭТОРМК, false, true ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ <> false AND !ПУСТО(Ответ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СтатусОбмена = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ КоличествоЧеков = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ НомерПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ ДатаПервогоЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 4) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоЧеков > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаДатаПервогоНеотправленного = RIGHT("00" + SUBSTR(ДатаПервогоЧека,1,2),2) + "." + RIGHT("00" + SUBSTR(ДатаПервогоЧека,3,2),2) + "." + SUBSTR(ДатаПервогоЧека,5,2) + " " + "00:00:00";/##CHR(13)##//##CHR(10)##/ ДатаПервогоНеотправленного = CTOD(СтрокаДатаПервогоНеотправленного,0); /##CHR(13)##//##CHR(10)##/ ТекущаяДата = DATE(); /##CHR(13)##//##CHR(10)##/ ВозврастБуфераДней = VAL(DATEDIFF(ТекущаяДата, ДатаПервогоНеотправленного, ''day'')); /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ВозврастБуфераДней;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',96.00000000,'//Выплата денег./##CHR(13)##//##CHR(10)##///если получили ошибку при активизации, то завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( _ERROR == true )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИДКоманды = "O";/##CHR(13)##//##CHR(10)##///ОТКРЫТИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ТипДокумента = "5"; //выплата/##CHR(13)##//##CHR(10)##/НомерСекции = "1";/##CHR(13)##//##CHR(10)##/_ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир" ,ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28) + /##CHR(13)##//##CHR(10)##/ИмяОператора + CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ВЫПЛАТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "48";/##CHR(13)##//##CHR(10)##/Валюта = "Рубли";/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды + Валюта + CHR(28)+Сумма+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ЗАВЕРШЕНИЕ ДОКУМЕНТА/##CHR(13)##//##CHR(10)##/НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ФлагОтрезки = "1"; //отрезка сервисных документов по завершению не выполняется, остальные отрезаются/##CHR(13)##//##CHR(10)##/Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //_ERROR = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',98.00000000,'// Функции для работы платежной системы/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ Ошибка( Результат )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Результат < 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( Результат > -10000 AND Результат <> -5 )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( DriverPayCard.ResultDescription + " | " + DriverPayCard.ResultPrompt );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ВыполнитьАвторизацию ( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( DriverPayCard.PrepareOnLineAuthorization( ) ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Запрашиваем значение реквизита Ссылочный номер/##CHR(13)##//##CHR(10)##/ ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", "''ССЫЛОЧНЫЙНОМЕР''" );/##CHR(13)##//##CHR(10)##/ IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ ) RETURN false;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ССЫЛОЧНЫЙНОМЕР;/##CHR(13)##//##CHR(10)##/ // Повторно авторизуемся/##CHR(13)##//##CHR(10)##/ IF ( Ошибка( DriverPayCard.PrepareOnLineAuthorization( ) ) ) RETURN false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReferenceNumber <> 0 AND ПУСТО( DriverPayCard.ReferenceNumber ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Неверно указан номер ссылки для возврата." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedReaderEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо прочитать номер карты ридером магнитных карт." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( DriverPayCard.NeedKeyboardEntryDataTracks <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо ввести номер карты." + CHR( 13 ) + "Прерываем авторизацию" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRSessionNumber = НомерСмены;/##CHR(13)##//##CHR(10)##/ DriverPayCard.ECRReceiptNumber = НомерЧека;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ Результат = DriverPayCard.OnLineAuthorization();/##CHR(13)##//##CHR(10)##/ IF ( Результат >= 0 OR Результат < -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO paycardtrans ( AuthCode, TransType, OperationType, Sum, CardNumber, SlipNumber, TransDate, TransTime, MsgNumber, TerminalID, ReferenceNumber, ResponseCode)/##CHR(13)##//##CHR(10)##/ VALUES ( ''" + DriverPayCard.AuthCode + "'', " + DriverPayCard.TransType + ", " + DriverPayCard.OperationType + ", " + DriverPayCard.Sum + ", ''" + DriverPayCard.CardNumber + "'', " + DriverPayCard.SlipNumber + ", ''" + DriverPayCard.TransDate + "'', ''" + DriverPayCard.TransTime + "'', " + DriverPayCard.MsgNumber + ", ''" + DriverPayCard.TerminalID + "'', ''" + DriverPayCard.ReferenceNumber + "'', ''" + DriverPayCard.ResponseCode + "'' )" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НОМЕРУСТРОЙСТВАДЛЯПС = ЗАПРОС( "SELECT devicenumber FROM sprequipment WHERE f_paysystem = 1" );/##CHR(13)##//##CHR(10)##/ ИНДЕКСУСТРОЙСВАПЕЧАТИ = ЕСЛИ(!ПУСТО(НОМЕРУСТРОЙСТВАДЛЯПС),НОМЕРУСТРОЙСТВАДЛЯПС,ИНДЕКСУСТРОЙСТВАККМ);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //откроем сервисный документ в ККМ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА = 0;/##CHR(13)##//##CHR(10)##/ ПрерываниеПечати = false;/##CHR(13)##//##CHR(10)##/ WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Ind = 0;/##CHR(13)##//##CHR(10)##/ WHILE ( Ind < DriverPayCard.TextCount )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.TextIndex = Ind;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + DriverPayCard.Text + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ind = Ind + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НОМЕРКОПИИСЛИПА++;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ n=1;/##CHR(13)##//##CHR(10)##/ WHILE (n <= _КОЛИЧЕСТВОСТРОКПЕРЕДОТРЕЗОМСЛИПА)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //добавим в контекст строку для печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, password, mode, checktype, name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, '''', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //завершим слип с отрезкой (флаг отрезки = 5)/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокСлипа + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 5, 0 )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПечатьСлипаНаФР( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Ошибка печати слипа на ФР");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//WHILE ( НОМЕРКОПИИСЛИПА < _КОЛИЧЕСТВОКОПИЙСЛИПА )/##CHR(13)##//##CHR(10)##/ } //IF ( Результат >= 0 OR Результат <= -10000 AND Результат > -11000 )/##CHR(13)##//##CHR(10)##/ IF ( Ошибка ( Результат ) )/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью банковского слипа/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьСлипаНаФР()/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "V";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокСлипа + " ORDER BY identity_column", "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыСлипЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( КомандыСлипЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "O";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыСлипЧека.checktype;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыСлипЧека.name );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыСлипЧека.closetype == 0, "", КомандыСлипЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыСлипЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "G";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ ОтветОтрезки = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыСлипЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( _ERRORTEXT, "Ошибка метода " + Операция + " " + Ответ );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыСлипЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокСлипа );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЭТОРМК = false; /##CHR(13)##//##CHR(10)##/ IF (TYPE("_МРП") <> "U")/##CHR(13)##//##CHR(10)##/ ЭТОРМК = _МРП == "2";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "ЕГАИС слип" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //открываем сервисный документ для печати нефискальных строк/##CHR(13)##//##CHR(10)##/ ИДКоманды = "E";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = "1"; //сервисный документ/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 100;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки("");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Опредяляем общие реквизиты чека/##CHR(13)##//##CHR(10)##/ КОДУТМ = КомандыЧека.utm_code;/##CHR(13)##//##CHR(10)##/ ЕГАИССКЛАД = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_SKLAD" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##/ ЕГАИСФИРМА = ЗАПРОС( "SELECT value FROM param_ex WHERE param = ''EGAIS_FIRM" + КОДУТМ + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕКИНН = ЗАПРОС( "SELECT inn FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕККПП ) )/##CHR(13)##//##CHR(10)##/ ЧЕККПП = ЗАПРОС( "SELECT kpp FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКНАИМЕНОВАНИЕ = ЗАПРОС( "SELECT name FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT address FROM sprskl WHERE code = ''" + ЕГАИССКЛАД + "''" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( ЧЕКАДРЕС ) )/##CHR(13)##//##CHR(10)##/ ЧЕКАДРЕС = ЗАПРОС( "SELECT adress FROM sprfirm WHERE code = ''" + ЕГАИСФИРМА + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ЧЕККАССА = ЗАПРОС( "SELECT serialnumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРСМЕНЫ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = ККТ_НОМЕРСМЕНЫ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер смены/##CHR(13)##//##CHR(10)##/ ИДКоманды = "H";/##CHR(13)##//##CHR(10)##/ НомерСмены = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "6";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусСмены = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ //если считываем номер смены при закрытой смене, то вернется номер последней закрытой смены, поэтому увеличим его на 1/##CHR(13)##//##CHR(10)##/ IF ( СтатусСмены == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерСмены = НомерСмены + 1; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерСмены <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = НомерСмены;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКСМЕНА = ЗАПРОС( "SELECT ecrsession FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ККТ_НОМЕРЧЕКА))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерЧека = ККТ_НОМЕРЧЕКА;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //номер чека/##CHR(13)##//##CHR(10)##/ ИДКоманды = "N";/##CHR(13)##//##CHR(10)##/ НомерЧека = 0;/##CHR(13)##//##CHR(10)##/ НомерКоманды = "78";/##CHR(13)##//##CHR(10)##/ НомерЗапроса = "3";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НомерЗапроса+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ IF ( LEFT( СтрокаОтвета, 1 ) == НомерЗапроса)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = RIGHT( СтрокаОтвета, LEN(СтрокаОтвета) - 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерЧека = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) ) + 1;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (НомерЧека <> 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = НомерЧека;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЧЕКНОМЕР = ЗАПРОС( "SELECT chequeNumber FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( ЧЕКНАИМЕНОВАНИЕ );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ИНН: " + ЧЕКИНН, 20 ) + "КПП: " + ЧЕККПП );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "КАССА: " + ЧЕККАССА, 20 ) + "СМЕНА: " + ЧЕКСМЕНА );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( PADR( "ЧЕК: " + ЧЕКНОМЕР, 14 ) + "ДАТА: " + LEFT( TTOC( ДАТАВРЕМЯ( ) ), 16 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьШтрихкода( 0, 4, 0, 8, КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.egais_url );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( LEFT(КомандыЧека.egais_sign, 72) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем сервисный документ с нефискальными строками/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = КомандыЧека.echeque;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11";/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РежимФормированияДокумента = 1; //0 - Обычный режим формирования документа, 1 - Пакетный режим формирования документа/##CHR(13)##//##CHR(10)##/ РежимПечатиРеквизитов = 0; //0 - Обычный режим печати реквизитов, 1 - Режим отложенной печати реквизитов/##CHR(13)##//##CHR(10)##/ РежимПечатиЧека = ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, 1, 0 ); //0 - Обычный режим печати чека, 1 - Чек не печатается; Реализована , начиная с версий 565.1.13 и 665.4.13/##CHR(13)##//##CHR(10)##/ ТипДокументаДвоичный = ALLTRIM( STR( ТипДокумента, 4, 0, true, false, 2) );/##CHR(13)##//##CHR(10)##/ ТипИРежимДокументаФлаги = STR(РежимПечатиЧека,1,0,true,true) + "0" + STR(РежимПечатиРеквизитов,1,0,true,true) + "" +/##CHR(13)##//##CHR(10)##/ STR(РежимФормированияДокумента,1,0,true,true) + STR(ТипДокументаДвоичный,1,0,true,false);/##CHR(13)##//##CHR(10)##/ ТипИРежимДокумента = VAL( ТипИРежимДокументаФлаги, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /*/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "ТипДокументаДвоичный = " + ТипДокументаДвоичный + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипИРежимДокументаФлаги = " + ТипИРежимДокументаФлаги + CHR(13) + CHR(10) + /##CHR(13)##//##CHR(10)##/ "ТипИРежимДокумента = " + ТипИРежимДокумента, "Проверка типа докумнета");/##CHR(13)##//##CHR(10)##/ *//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипИРежимДокумента+CHR(28)+НомерСекции+CHR(28)+ /##CHR(13)##//##CHR(10)##/ ИмяОператора + CHR(28)+НомерДокумента+CHR(28)+ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если значение GTIN получается меньше 6 байт то дополняет до 6 байт (в нашем случае строка, поэтому дополняем до 12 символов)/##CHR(13)##//##CHR(10)##/ GTINHEX = RIGHT( "000000000000" + GTINHEX, 12);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды + КОДТОВАРНОЙНОМЕНКЛАТУРЫ+/##CHR(13)##//##CHR(10)##/ CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( ALLTRIM( КомандыЧека.name ), 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара + /##CHR(13)##//##CHR(10)##/ CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+ КодНалогаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+/##CHR(13)##//##CHR(10)##/ СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 100;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = STR( ROUND( КомандыЧека.price, 2 ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя +/##CHR(13)##//##CHR(10)##/ CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 1000;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // отмена авторизации платежной системы/##CHR(13)##//##CHR(10)##/ IF ( СуммаБезнал > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ ( "Необходимо провести отмену авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = CreateObject( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = ККТ_ШИРИНАЛЕНТЫ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = СуммаБезнал;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 3;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию() )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка отмены авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ DriverPayCard = false; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0;/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Открыть чек/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Создаем временную таблицу, в которую будем записывать все строки чека/##CHR(13)##//##CHR(10)##/PUBLIC ИмяТаблицыСтрокЧека, ИТОГОНДС, _ПЕЧАТАТЬСКИДКИ, _ВСЕГОСКИДКАНАЧЕК, _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( TYPE("КОДОБОРУДОВАНИЯ") == "U" )/##CHR(13)##//##CHR(10)##/ КОДОБОРУДОВАНИЯ = ФРКОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (TYPE("ВСЕГОБОНУСОВ") <> "U")/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = ВЫЧИСЛИТЬ("ВСЕГОБОНУСОВ","F");/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ _ВСЕГООПЛАТАБОНУСАМИ = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ПЕЧАТАТЬСКИДКИ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 0 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 1 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 2 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 3 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 4 ] = 0.00;/##CHR(13)##//##CHR(10)##/ИТОГОНДС[ 5 ] = 0.00;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, _price_u float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int, marktype char(10), /##CHR(13)##//##CHR(10)##/ markbc varchar(150), clientcode varchar(10))" );/##CHR(13)##//##CHR(10)##///таблица для печати слипа платежной системы/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокСлипа = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокСлипа + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если передан непустой параметр ЕГАИС_ОТВЕТ, то добавляем в список команд, перед открытием чека, команду печати слипа ЕГАИС/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ЕГАИС_ОТВЕТ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SET FMTONLY ON SELECT CONVERT( char( 250 ), '''' ) AS url, CONVERT( char( 250 ), '''' ) AS sign SET FMTONLY OFF", "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/ ЗАГРУЗИТЬ( "ЕгаисUrl", "XMLSTRING", ЕГАИС_ОТВЕТ, "A" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, egais_url, egais_sign, utm_code )/##CHR(13)##//##CHR(10)##/ VALUES ( ''ЕГАИС слип'', ''" + STDF( ЕгаисUrl.url, 250 )+ "'', ''" + STDF( ЕгаисUrl.sign, 250 ) + "'', ''" + КОДУТМ + "'' )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕгаисUrl" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( _ТИПДОКУМЕНТАОСНОВАНИЯ ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //откроем сервисный документ для печати строки/##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( 6 );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ndok, date FROM spr000 WHERE code= ''" + _ТИПДОКУМЕНТАОСНОВАНИЯ + "'' AND ic= " + _ИДДОКУМЕНТАОСНОВАНИЯ, "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''Товарный чек № " + ДокументоИнфо.ndok + " от " + DTOC( ДокументоИнфо.date ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ДокументоИнфо" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закроем сервисный документ в ККМ по завершению печати/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Тип чека = 0 Продажа (приход) - В ККМ = 2/##CHR(13)##//##CHR(10)##///Тип чека = 1 Возврат (возврат прихода) - В ККМ = 3/##CHR(13)##//##CHR(10)##///Тип чека = 6 Прочее/Вскрытие тары (приход) (или нефискальный)/##CHR(13)##//##CHR(10)##///Тип чека = 4 Расход по ФН (Расход) - В ККМ = 6/##CHR(13)##//##CHR(10)##///Тип чека = 5 Возврат расхода по ФН (Возврат расхода) - В ККМ = 7/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека ); //ЕСЛИ( ТипЧека == 1, "3", ЕСЛИ( ТипЧека == 4, "6" , ЕСЛИ( ТипЧека == 5, "7", "2" ) ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',99.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с товарами и завершаем выполнение данного модуля/##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //строка Наименование + Код/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STDF( LEFT( Наименование, 72) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + " Код: " + STDF( LEFT( КОД, 72) ) + "'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ //строка Количество * Цену/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''" + STR( Количество, 16, 3 ) + '' * '' + ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, STR( Цена, 16, 2 ), STR( ЦенаСоСкидкой, 16, 2 ) ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',101.00000000,'// Регистрация/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// Наименование строка, наименование ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// Цена число вещественое, цена ТМЦ или услуги, /##CHR(13)##//##CHR(10)##/// Количество число вещественное, количество ТМЦ или услуги,/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[0] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[1] = 1; //товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[2] = 2; //подакцизный товар/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[3] = 3; //работа/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[4] = 4; //услуга/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[5] = 12; //составной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[6] = 13; //иной предмет расчета/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[7] = 10; //платеж или выплата/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[0] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[1] = 3; //"АВАНС"/##CHR(13)##//##CHR(10)##/СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[2] = 4; //"ПОЛНЫЙ РАСЧЕТ"/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СекцияККМ = VAL( ЗАПРОС( "SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode= ''" + Код + "''" ) );/##CHR(13)##//##CHR(10)##/КодНалогаАйтида = ЗАПРОС( "SELECT kodn FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/КодНалогаККМ = ЗАПРОС("SELECT sprkod.ex_code AS ex_code FROM sprkodn sprkod/##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn spec ON spec.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = spec.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //заполняем налог стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьКодНалогаВККМ( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/_ЕСТЬМАРКИРОВКА = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''f_mark'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ("SELECT ISNULL(sprres_g.rsubject,0) AS rsubject, ISNULL(sprres_g.paytype,0) AS paytype, " + ЕСЛИ(_ЕСТЬМАРКИРОВКА==1, "sprres.f_mark", "0") + " AS f_mark /##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + Код + "''","ТоварИнфо",1);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ПредметРасчетаАйтида = VAL( ТоварИнфо.rsubject);/##CHR(13)##//##CHR(10)##/ПредметРасчета = СООТВЕТСТВИЕПРЕДМЕТОВРАСЧЕТА[ПредметРасчетаАйтида];/##CHR(13)##//##CHR(10)##/СпособРасчетаАйтида = VAL( ТоварИнфо.paytype);/##CHR(13)##//##CHR(10)##/СпособРасчета = СООТВЕТСТВИЕСПОСОБОВРАСЧЕТА[СпособРасчетаАйтида]; /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТипМаркировки = "";/##CHR(13)##//##CHR(10)##/ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/МаркированныйТовар = ТоварИнфо.f_mark;/##CHR(13)##//##CHR(10)##/IF ( МаркированныйТовар )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ЕСТЬТИПМАРКИРОВКИ = VAL(ЗАПРОС("SELECT CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = N''sprres'') AND (COLUMN_NAME = N''markgroup'')) THEN 1 ELSE 0 END"));/##CHR(13)##//##CHR(10)##/ IF ( _ЕСТЬТИПМАРКИРОВКИ == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ТипМаркировки = ЗАПРОС( "SELECT markgroup FROM sprres WHERE sprres.maincode= ''" + Код + "''" );/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( ШТРИХКОД ) ) <= 13 )/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = "";/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = ALLTRIM( ШТРИХКОД );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Разбор списка марок позиции/##CHR(13)##//##CHR(10)##/КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ШтрихКодМаркировки ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ATC( ШтрихКодМаркировки, "|") > 0 AND МаркированныйТовар AND VAL(ТипМаркировки) == 5 )/##CHR(13)##//##CHR(10)##/ { /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ РазделительМарок = "|";/##CHR(13)##//##CHR(10)##/ НомерСлова = 1;/##CHR(13)##//##CHR(10)##/ ШтрихКодМаркировки = РазделительМарок + ШтрихКодМаркировки;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //подсчет количества разделителей в строке для определения количества слов/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( Марка ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //обычные штрикоды пропускаем/##CHR(13)##//##CHR(10)##/ IF ( LEN( ALLTRIM( Марка ) ) > 13 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоличествоМарок++;/##CHR(13)##//##CHR(10)##/ Марки[ КоличествоМарок ] = Марка; /##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ НомерСлова++;/##CHR(13)##//##CHR(10)##/ Марка = ПОЛУЧИТЬСЛОВО( ШтрихКодМаркировки, РазделительМарок, НомерСлова );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец разбора списка марок/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_Цена_Учет = Цена;/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##///проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/КоличествоТовара = Количество;/##CHR(13)##//##CHR(10)##///СуммаТовара = ROUND( summasale, 2 );/##CHR(13)##//##CHR(10)##/СуммаТовара = ROUND( summawd - 0.004, 2 ); //уменьшаем сумму позиции на 0.005 для округления в меньшую сторону/##CHR(13)##//##CHR(10)##/ЦенаТоварнойПозиции = Цена;/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(Цена*Количество*ROUND(percentdiscount,4)/100, 2), 0 );/##CHR(13)##//##CHR(10)##///СуммаСкидкиПозиции = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND( summadiscount , 2), 0 );/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозиции = Цена*Количество - СуммаТовара; //скидку будем считать как разницу между суммой со скидками произведением цены товара и количества./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если это продажа по свободной цене, то обнулим скидку, иначе она будер равна 100% на такую позицию/##CHR(13)##//##CHR(10)##/IF (ПУСТО(Код))/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///для отладки/##CHR(13)##//##CHR(10)##/СуммаСкидкиПозицииСумм = ЕСЛИ( _ПЕЧАТАТЬСКИДКИ, ROUND(summadiscount, 2), 0 );/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("Цена учетная: " + ЦенаТоварнойПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "Цена продажи: " + ЦенаПродажи + CHR(13) + /##CHR(13)##//##CHR(10)##/ "Сумма товара: " + СуммаТовара + CHR(13) + /##CHR(13)##//##CHR(10)##/ "СуммаСкидкиПозиции = " + СуммаСкидкиПозиции + CHR(13) +/##CHR(13)##//##CHR(10)##/ "summasale = " + summasale + CHR(13) + /##CHR(13)##//##CHR(10)##/ "percentdiscount = " + percentdiscount + CHR(13) + /##CHR(13)##//##CHR(10)##/ "summadiscount = " + СуммаСкидкиПозицииСумм);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///передадим вручную введенную цену как цену товара, если на товар не задана учетная цена/##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции == 0 )/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##///если ввели цену вручную, то пересчитаем скидку и за основу возьмем цену, введенную вручную/##CHR(13)##//##CHR(10)##///( (ЦенаТоварнойПозиции*Количество - СуммаСкидкиПозиции) <> СуммаТовара ) /##CHR(13)##//##CHR(10)##/IF ( ЦенаТоварнойПозиции <> ЦенаПродажи )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПродажи;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК + СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///форматно-логический контроль/##CHR(13)##//##CHR(10)##/IF (Количество <> 1)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара; //- СуммаСкидкиПозиции;//Количество * ЦенаТоварнойПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / Количество, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( Количество * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = Количество;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ ТекущаяСуммаНДС = summands;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПереоценки = VAL( STR( ТекущаяСуммаНДС * КоличествоПереоценки / ТекущееКоличество, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = Количество - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСНовая = ТекущаяСуммаНДС - СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + ALLTRIM( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСуммаНДС) )/##CHR(13)##//##CHR(10)##/ СуммаНДСПозиции = СуммаНДСПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если есть более одной марки табачной продукции, то разделим строки с марками на отдельные строки чека/##CHR(13)##//##CHR(10)##/IF ( КоличествоМарок >= 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ НомерМарки = 1;/##CHR(13)##//##CHR(10)##/ Цена = СуммаТовара/ЕСЛИ(КоличествоТовара==0,1,КоличествоТовара); //цена за единицу позиции/##CHR(13)##//##CHR(10)##/ WHILE ( НомерМарки <= КоличествоМарок )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ШКМарки = Марки[ НомерМарки ];/##CHR(13)##//##CHR(10)##/ НомерМарки++;/##CHR(13)##//##CHR(10)##/ Количество = 1; /##CHR(13)##//##CHR(10)##/ Сумма = Цена;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки в случае разделения позиции не выводим/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( Количество, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( Сумма, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШКМарки) + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //уменьшим общее количество товара и сумму для случая когда в одной строке будет объединено несколько позиций с марками и без них/##CHR(13)##//##CHR(10)##/ //количество единиц без марок будут пробиты отдельной строкой/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоТовара - Количество;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СуммаТовара - Сумма; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если осталось что добавить в чек после разделения, то добавляем/##CHR(13)##//##CHR(10)##/ IF ( КоличествоТовара > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( Цена, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, _price_u, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant, marktype, markbc )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Возврат'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( _Цена_Учет, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчета + ", " + СпособРасчета + ", ''" + ТипМаркировки + "'', ''" + STDF(ШтрихКодМаркировки) + "'' )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',131.00000000,'//Авансовый платеж из ПКО./##CHR(13)##//##CHR(10)##///@ИДДокумента - идентификатор документа, из которого происходит печать чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Функция, которая будет заниматься печатью чека/##CHR(13)##//##CHR(10)##/ФУНКЦИЯ ЛОКАЛЬНАЯ ПечатьЧекаНаФР( )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //сначала запросим данные по чеку (открыт ли он)/##CHR(13)##//##CHR(10)##/ СтатусДок = 0;/##CHR(13)##//##CHR(10)##/ ИДКоманды = "L";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "00";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаОтвета = RIGHT( Ответ, LEN(Ответ) - 2);/##CHR(13)##//##CHR(10)##/ ОтветныеПараметры = CHR(28) + СтрокаОтвета;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СтатустФС = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 1) );/##CHR(13)##//##CHR(10)##/ СтатусФЛ = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 2) );/##CHR(13)##//##CHR(10)##/ СтатусДок = VAL( ПОЛУЧИТЬСЛОВО(ОтветныеПараметры, CHR(28), 3) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СтатусДок ) <> 0 ) //если чек открыт/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерКоманды = "32"; //аннулирование чека/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Ответ = "";/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM " + ИмяТаблицыСтрокЧека + " ORDER BY identity_column", "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "КомандыЧека" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Команда: " + КомандыЧека.operation);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КомандыЧека.operation == "Открыть чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "30";/##CHR(13)##//##CHR(10)##/ ТипДокумента = КомандыЧека.checktype;/##CHR(13)##//##CHR(10)##/ //ТипДокумента = "000" + ALLTRIM(КомандыЧека.checktype) + "11;/##CHR(13)##//##CHR(10)##/ НомерСекции = 1;/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ ИмяОператора = ЕСЛИ( ПУСТО( _ИМЯКАССИРА ), "Кассир", ALLTRIM( _ИМЯКАССИРА ) );/##CHR(13)##//##CHR(10)##/ НомерДокумента = ""; //необходим, если нумерация чеков ведется во внешней программе/##CHR(13)##//##CHR(10)##/ //СНО/##CHR(13)##//##CHR(10)##/ СистемаНО = ЗАПРОС( "SELECT CASE WHEN taxtype = 1 THEN 0/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 2 THEN 1/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 4 THEN 2/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 8 THEN 3/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 16 THEN 4/##CHR(13)##//##CHR(10)##/ WHEN taxtype = 32 THEN 5/##CHR(13)##//##CHR(10)##/ ELSE ''-1'' END AS SNO/##CHR(13)##//##CHR(10)##/ FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипДокумента+CHR(28)+НомерСекции+CHR(28)+ИмяОператора+CHR(28)+НомерДокумента+CHR(28)+/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СистемаНО < 0, "", СистемаНО )+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций = 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Печать строки" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //печать строки/##CHR(13)##//##CHR(10)##/ _ВИКИ_ПечатьСтроки( КомандыЧека.name );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Регистрация" OR КомандыЧека.operation == "Возврат" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КомандыЧека.marktype ) AND !ПУСТО( КомандыЧека.markbc ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "444D";/##CHR(13)##//##CHR(10)##/ IF ( VAL( КомандыЧека.marktype ) == 5 ) //табачная продукция/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 7 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 3 ) //лекарства/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 1520 ) //обувь/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 3, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 19, 13 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( КомандыЧека.marktype ) == 2 ) //меховые изделия/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРЕФИКСТЭГА1162 = "5246";/##CHR(13)##//##CHR(10)##/ gtin = SUBSTR( КомандыЧека.markbc, 1, 14 );/##CHR(13)##//##CHR(10)##/ serial = SUBSTR( КомандыЧека.markbc, 15, 20 ); //??? под вопросом начальная позиция/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINДвоичн = ВМАССИВ(ЧИСЛО64(gtin));/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = RIGHT( ALLTRIM(GTINДвоичн), LEN(ALLTRIM(GTINДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перевернем GTIN и отбросим лидирующие 0/##CHR(13)##//##CHR(10)##/ GTINHEX = "";/##CHR(13)##//##CHR(10)##/ WHILE (!ПУСТО(GTINСТРОКОЙ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = RIGHT(GTINСТРОКОЙ, 2);/##CHR(13)##//##CHR(10)##/ GTINСТРОКОЙ = LEFT(GTINСТРОКОЙ, LEN(GTINСТРОКОЙ) - 2);/##CHR(13)##//##CHR(10)##/ //лидирующие нули пропускаем/##CHR(13)##//##CHR(10)##/ IF (СтрокаБайт == "00")/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ GTINHEX = GTINHEX + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SERIALДвоичн = ВМАССИВ(serial);/##CHR(13)##//##CHR(10)##/ SERIALСТРОКОЙ = RIGHT( ALLTRIM(SERIALДвоичн), LEN(ALLTRIM(SERIALДвоичн)) - 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТэгКодТовара = ПРЕФИКСТЭГА1162 + GTINHEX + SERIALСТРОКОЙ;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !ПУСТО( ТэгКодТовара ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаБайт = LEFT(ТэгКодТовара, 2);/##CHR(13)##//##CHR(10)##/ ТэгКодТовара = RIGHT(ТэгКодТовара, LEN(ТэгКодТовара) - 2); /##CHR(13)##//##CHR(10)##/ КОДТОВАРНОЙНОМЕНКЛАТУРЫ = КОДТОВАРНОЙНОМЕНКЛАТУРЫ + "$" + СтрокаБайт;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИДКоманды = "M";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "24";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+КОДТОВАРНОЙНОМЕНКЛАТУРЫ+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) == "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "42"; /##CHR(13)##//##CHR(10)##/ НаименованиеТовара = LEFT( КомандыЧека.name, 256);/##CHR(13)##//##CHR(10)##/ АртикулТовара = "";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КомандыЧека.quantity;/##CHR(13)##//##CHR(10)##/ КодНалогаТовара = КомандыЧека.kodn - 1; //индекс налога меньше на 1 передаваемого номера/##CHR(13)##//##CHR(10)##/ НомерПозиции = "";/##CHR(13)##//##CHR(10)##/ Секция = КомандыЧека.department;/##CHR(13)##//##CHR(10)##/ ТипСкидкиНаценки = ЕСЛИ ( КомандыЧека.discountvalue > 0, 2, 4 ); //2- суммовая скидка, 4 - суммовая наценка/##CHR(13)##//##CHR(10)##/ ЗарезервПараметр = "";/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = КомандыЧека.discountvalue;/##CHR(13)##//##CHR(10)##/ ЦенаУчетная = КомандыЧека._price_u;/##CHR(13)##//##CHR(10)##/ СуммаПозиции = КомандыЧека.summa;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не вся скидка распределилась и есть остаток, то уменьшим на этот остаток сумму первой позиции/##CHR(13)##//##CHR(10)##/ IF ( VAL( _ВСЕГОСКИДКАНАЧЕК ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //уменьшим сумму скидки на сумму оплаты бонусами (чтобы бонусы не мешали расчету скидок на позиции)/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - _ВСЕГООПЛАТАБОНУСАМИ;/##CHR(13)##//##CHR(10)##/ //уменьшамем сумму на остаток скидки/##CHR(13)##//##CHR(10)##/ СуммаПозиции = ROUND( СуммаПозиции + _ВСЕГОСКИДКАНАЧЕК, 2); //было ROUND( СуммаПозиции - _ВСЕГОСКИДКАНАЧЕК, 2);/##CHR(13)##//##CHR(10)##/ //так же изменим сумму скидки на позицию на величину остатка скидки/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидкиПозиции - _ВСЕГОСКИДКАНАЧЕК; //было СуммаСкидкиПозиции + _ВСЕГОСКИДКАНАЧЕК;/##CHR(13)##//##CHR(10)##/ _ВСЕГОСКИДКАНАЧЕК = 0.00; //остаток обнуляем, чтобы не применился к остальным позициям/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ЦенаТовара = ALLTRIM( STR( ( СуммаПозиции / ЕСЛИ(КомандыЧека.quantity==0,1,КомандыЧека.quantity)), 10, 2) );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ЕСЛИ ( КомандыЧека.discountvalue < 0, -1*КомандыЧека.discountvalue, КомандыЧека.discountvalue );/##CHR(13)##//##CHR(10)##/ СкидкаНаценка = ALLTRIM( STR( СкидкаНаценка, 10, 2) );/##CHR(13)##//##CHR(10)##/ //отладка/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("Товар: " + ПЕРЕКОДИРОВАТЬ(НаименованиеТовара, "OEM", "ANSI") + " / Цена: " + ЦенаТовара + " / Скидка: " + СкидкаНаценка + " / Количество: " + КоличествоТовара );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ > 0)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF (ВСЕГОКРЕДИТ < СуммаЧека)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 6; //передача в кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = КомандыЧека.rvariant;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПредметРасчета = КомандыЧека.rsubject;/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара = "";/##CHR(13)##//##CHR(10)##/ НомерТД = "";/##CHR(13)##//##CHR(10)##/ СуммаАкциза = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+НаименованиеТовара+CHR(28)+АртикулТовара+CHR(28)+КоличествоТовара+CHR(28)+ЦенаТовара+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодНалогаТовара+CHR(28)+НомерПозиции+CHR(28)+Секция+CHR(28)+ТипСкидкиНаценки+CHR(28)+ЗарезервПараметр+CHR(28)+СкидкаНаценка+CHR(28)+СпособРасчета+CHR(28)+ПредметРасчета+CHR(28)+/##CHR(13)##//##CHR(10)##/ КодСтраныПРТовара+CHR(28)+НомерТД+CHR(28)+СуммаАкциза+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 200;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true); /##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Оплата" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "47";/##CHR(13)##//##CHR(10)##/ ТипОплаты = КомандыЧека.closetype;/##CHR(13)##//##CHR(10)##/ СуммаОплаты = ROUND( КомандыЧека.price, 2 ); /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ТипОплаты+CHR(28)+СуммаОплаты+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 300;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //Ответ = "00";/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Закрытие чека" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "C";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "31";/##CHR(13)##//##CHR(10)##/ ФлагОтрезки = ЕСЛИ( КомандыЧека.closetype == 0, "", КомандыЧека.closetype ); //Если параметр “Флаг отрезки” = 1, отрезка сервисных документов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ //Если параметр “Флаг отрезки” = 5, отрезка чеков продажи, покупки и возвратов по завершению не выполняется./##CHR(13)##//##CHR(10)##/ АдресПокупателя = ЕСЛИ( ПУСТО(ПОЧТА), "", ПОЧТА );/##CHR(13)##//##CHR(10)##/ РазныеФлаги = ""; //0 - Признак расчетов только за услуги; 1 - Признак расчетов в интернет/##CHR(13)##//##CHR(10)##/ Покупатель = "";/##CHR(13)##//##CHR(10)##/ ИННПокупателя = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+ФлагОтрезки+CHR(28)+АдресПокупателя+CHR(28)+РазныеФлаги+CHR(28)+Покупатель+CHR(28)+ИННПокупателя+CHR(28)+CHR(28)+CHR(28)+CHR(28)+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ Ответ = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, true);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ //IF ( ПЕЧАТАТЬКОПИЮ )/##CHR(13)##//##CHR(10)##/ //{/##CHR(13)##//##CHR(10)##/ //}/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( КомандыЧека.operation == "Отрезать чек" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДКоманды = "*";/##CHR(13)##//##CHR(10)##/ НомерКоманды = "34";/##CHR(13)##//##CHR(10)##/ Команда = CHR(2)+ПарольУстройства+""+ИДКоманды+""+НомерКоманды+CHR(3);/##CHR(13)##//##CHR(10)##/ КомандаДляККМ = СформироватьКомандуДляККМ( Команда );/##CHR(13)##//##CHR(10)##/ ЗадержкаКассовыхОпераций= 500;/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " : " + КомандаДляККМ);/##CHR(13)##//##CHR(10)##/ ОтветОтрезка = ПередатьКомандуВПорт(НомерПорта, КомандаДляККМ, ИДКоманды, НомерКоманды, ЗадержкаКассовыхОпераций, false);/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ(КомандыЧека.operation + " / " + ответ);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если передача в порт завершилась ошибкой загрузки драйвера или ошибкой занатия порта, то вернется Ложь/##CHR(13)##//##CHR(10)##/ IF ( Ответ == false )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ");/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (LEFT(Ответ,2) <> "00")/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //СООБЩЕНИЕ("ОТВЕТ" + " / " + ответ);/##CHR(13)##//##CHR(10)##/ // Вывод ошибки/##CHR(13)##//##CHR(10)##/ _ERROR = true;/##CHR(13)##//##CHR(10)##/ _ERRORTEXT = ВернутьТекстОшибкиККМ( Ответ );/##CHR(13)##//##CHR(10)##/ //MessageBox( _ERRORTEXT, "Ошибка ККМ: " + Ответ);/##CHR(13)##//##CHR(10)##/ Операция = КомандыЧека.operation;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка метода " + Операция + " " + Ответ + " " + CHR(13) + "Текст ошибки: " + _ERRORTEXT, "Ошибка ККМ" );/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "КомандыЧека" );/##CHR(13)##//##CHR(10)##/ // Удаляем временную таблицу/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "DROP TABLE " + ИмяТаблицыСтрокЧека );/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРЧЕКА = 0;/##CHR(13)##//##CHR(10)##/ ККТ_НОМЕРСМЕНЫ = 0; /##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Для ПКО будем обрабатывать следующие документы и пробиваемые операции на основании их:/##CHR(13)##//##CHR(10)##///Расходная накладная - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товар и услуги)./##CHR(13)##//##CHR(10)##///Счет на оплату исходящий - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Заказ от покупателя - ПКО: Признак расчета: "ПРИХОД". Способ расчета: Предварительная оплата частичная или полная/##CHR(13)##//##CHR(10)##///Акт приема/передачи услуг (исходящий) - ПКО: Признак расчета: "ПРИХОД". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (услуги)/##CHR(13)##//##CHR(10)##///Возврат товаров поставщику - ПКО: Признак расчета: "ВОЗВРАТ РАСХОДА". Способ расчета: "полный расчет", "передача в кредит" или "оплата кредита" (товары и услуги)/##CHR(13)##//##CHR(10)##///одинокий ПКО: Признак расчета: "ПРИХОД". Способ расчета "аванс/предоплата" (прием аванса)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Определение переменных/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ начало/##CHR(13)##//##CHR(10)##///1. запрос параметров для пробития чека (email, электронный чек...)/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА = ВЫЧИСЛИТЬ("_ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///2. Ставка НДС для Авансовых платежей (элемент справочника "Коды налогов")/##CHR(13)##//##CHR(10)##///ДЛЯ ОРГАНИЗАЦИЙ НА ОБЩЕЙ СИСТЕМЕ НАЛООБЛОЖЕНИЯ/##CHR(13)##//##CHR(10)##///Исходя из положений главы 21 НК РФ получив авансовые платежи или предоплату в счет предстоящих поставок товаров (выполнения работ, оказания услуг) /##CHR(13)##//##CHR(10)##///организация обязана включить эти суммы в налоговую базу, относящуюся к тому налоговому периоду, в котором фактически эти платежи были получены /##CHR(13)##//##CHR(10)##///(см. письмо МНС России от 24 сентября 2003 г. № ОС-6-03/994 «О порядке исчисления и уплаты налога на добавленную стоимость»). /##CHR(13)##//##CHR(10)##///При этом не имеет значения, когда будут полностью исполнены обязательства организации-продавца, вытекающие из договора с покупателем товаров (работ, услуг),/##CHR(13)##//##CHR(10)##///и обязательства покупателя по оплате этих товаров (работ, услуг)./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///В соответствии с положениями пункта 4 статьи 164 НК РФ при получении денежных средств в виде авансовых или иных платежей /##CHR(13)##//##CHR(10)##///в счет предстоящих поставок товаров (выполнения работ, оказания услуг) сумма налога на добавленную стоимость определяется расчетным методом. /##CHR(13)##//##CHR(10)##///При этом налоговая ставка определяется как процентное отношение установленной налоговой ставки к налоговой ставке, принятой за 100 и увеличенной на соответствующий размер налоговой ставки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ДЛЯ ОСТАЛЬНЫХ ОРГАНИЗАЦИЙ/##CHR(13)##//##CHR(10)##///Авансы и полатежы в счет будущих поставок осуществляются БЕЗ НДС/##CHR(13)##//##CHR(10)##/_СТАВКАНДС_БЕЗНДС = "01"; //код налога Без НДС из справочника кодов налогов/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("1");/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = _СТАВКАНДС_БЕЗНДС; //Без НДС/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( _ККТ_СТАВКАНДСДЛЯАВАНСОВ, "vat", "");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_СТАВКАНДСДЛЯАВАНСОВ = STRTRANC( ВЫЧИСЛИТЬ( "_ККТ_СТАВКАНДСДЛЯАВАНСОВ" + ALLTRIM( КОДОБОРУДОВАНИЯ ) ), "vat", "");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///3. Определение email или телефона из данных контрагента/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА = ВЫЧИСЛИТЬ("_ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///4. Признак печати при предоплате не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при предоплате выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///5. Признак печати при оплате кредита не детализации по товарам, а обобщенного наменования предмета расчета (ссылка на накладную или договор, указанные в поле "Основание" кассового ордера)/##CHR(13)##//##CHR(10)##///по умолчанию при оплате кредита выводится детализация по товарам/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ) ) == "U" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА" ) == "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА = ВЫЧИСЛИТЬ("_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА"+ALLTRIM(КОДОБОРУДОВАНИЯ));/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///КОНСТАНТЫ конец/##CHR(13)##//##CHR(10)##///прочие переменные/##CHR(13)##//##CHR(10)##///КодДокументаРКО = "016"; //расходный кассовый ордер/##CHR(13)##//##CHR(10)##/КодДокументаРН = "002"; //расходная накладная/##CHR(13)##//##CHR(10)##/КодДокументаСчОП = "010"; //счет на оплату исходящий/##CHR(13)##//##CHR(10)##/КодДокументаЗаказ = "020"; //заказ от покупателя/##CHR(13)##//##CHR(10)##/КодДокументаУслуг = "050"; //акт приема/передачи услуг исходящий/##CHR(13)##//##CHR(10)##/КодДокументаВзП = "055"; //возврат товаров поставщику/##CHR(13)##//##CHR(10)##/Разделитель = ",";/##CHR(13)##//##CHR(10)##/СписокДопустимыхДокументов = КодДокументаРН + Разделитель + КодДокументаСчОП + Разделитель + КодДокументаЗаказ + Разделитель + /##CHR(13)##//##CHR(10)##/КодДокументаУслуг + Разделитель + КодДокументаВзП;/##CHR(13)##//##CHR(10)##/ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если документ уже выводился на ФР, то ничего не делаем/##CHR(13)##//##CHR(10)##/ЧекПробитНаККМ = ЗАПРОС( "SELECT f_kkm FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/IF ( ЧекПробитНаККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек из данного документа уже пробит на ККМ.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///Если ПКО не проведен, то прерываем пробитие, т.к. в этом случае нет возможности достоверно проанализировать взаиморасчеты и определить параметры для пробития текущего чека/##CHR(13)##//##CHR(10)##/ДокументПроведен = ЗАПРОС( "SELECT a.transacted FROM accountlist a WHERE a.code = ''023'' AND a.account_ = ''001'' AND a.ic = ''" + @ИДДокумента + "'' ");/##CHR(13)##//##CHR(10)##/IF ( ДокументПроведен <> 1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Запрещено пробитие кассового чека из непроведенного документа.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///начиная с релиза 3.9.3 для документа ПКО и РКО определены дополнительные виды оплат. Получим и проверим вид оплаты документа/##CHR(13)##//##CHR(10)##/ЭтоОплата = true;/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = false;/##CHR(13)##//##CHR(10)##/ЭтоАванс = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = false;/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = false;/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВидОплаты = UPPER( ALLTRIM( ЗАПРОС("SELECT intype FROM spr023 WHERE identity_column = " + @ИДДокумента) ) );/##CHR(13)##//##CHR(10)##/ЭтоОплата = ВидОплаты == "ОПЛАТА";/##CHR(13)##//##CHR(10)##/ЭтоОплатаКредита = ВидОплаты == "ОПЛАТА КРЕДИТА";/##CHR(13)##//##CHR(10)##/ЭтоАванс = ВидОплаты == "АВАНС";/##CHR(13)##//##CHR(10)##/ЭтоПредоплата100 = ВидОплаты == "ПРЕДОПЛАТА 100%";/##CHR(13)##//##CHR(10)##/ЭтоПредоплатаЧаст = ВидОплаты == "ПРЕДОПЛАТА ЧАСТ";/##CHR(13)##//##CHR(10)##/ЭтоПолныйРасчет = ВидОплаты == "ПОЛНЫЙ РАСЧЕТ";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///БОНУС пробивать не будем/##CHR(13)##//##CHR(10)##/IF ( !ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //выдаем сообщение/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Недопустимый вид оплаты для пробития чека.");/##CHR(13)##//##CHR(10)##/ //завершаем выполнение модуля/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/IF ( ЭтоОплата AND !ЭтоОплатаКредита AND !ЭтоАванс AND !ЭтоПредоплата100 AND !ЭтоПредоплатаЧаст AND !ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = true;/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ СтандартныйВидОплаты = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу для строк чека, куда будем помещать все операции по чеку для их последующего пробития через функцию ПечатьЧекаНаФР()/##CHR(13)##//##CHR(10)##/ИмяТаблицыСтрокЧека = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыСтрокЧека + " ( operation varchar( 20 ), password varchar( 50 ), mode int, checktype int, kodn int,/##CHR(13)##//##CHR(10)##/ name varchar( 250 ), quantity float, price float, summa float, department int, destination int, /##CHR(13)##//##CHR(10)##/ discounttype float, discountvalue float, closetype int, echeque bit DEFAULT 0,/##CHR(13)##//##CHR(10)##/ utm_code char( 10 ), egais_url varchar( 250 ), egais_sign varchar( 250 ), identity_column int IDENTITY( 1, 1 ), rsubject int, rvariant int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///создаем таблицу товаров, которую будем заполнять данными из спецификации документа основания и, при необходимости, производить распределение оплаты по строкам данной таблицы товаров./##CHR(13)##//##CHR(10)##/ИмяТаблицыТоваров = "##" + УникальноеИмя( );/##CHR(13)##//##CHR(10)##/ЗАПРОС( "CREATE TABLE " + ИмяТаблицыТоваров + " ( npp char(5), code char(10), s_code char(10), name varchar( 250 ), quantity float, price float, summa float, rsubject int, rvariant int, kodn int, department int)" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///1. Проверим, введен ли данный ПКО на основании Расходной накладной или Акта сдачи/приемки услуг (исходящий) (обработка такой связки всегда в приоритете, /##CHR(13)##//##CHR(10)##///т.к. это означает либо факт получения денежных стредств при отгрузке товаров (факту оказания услуг) или оплате кредита за отгруженный ранее товар (оказанные услуги)/##CHR(13)##//##CHR(10)##/ИДНакладной = ЗАПРОС( "SELECT cr_ic FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодНакладной = ЗАПРОС( "SELECT cr_code FROM crosslink WHERE code= ''023'' AND ic = " + @ИДДокумента + " AND account_=''001'' AND cr_type = ''1'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///проверим факт ввода данного документа на основании какого-либо документа, отличного от товарной накладной (с накладной могло быть проведено сопоставление оплаты)/##CHR(13)##//##CHR(10)##///данная проверка необходима на случай пробития чека из "предоплатного" документа/##CHR(13)##//##CHR(10)##/ИДДокументаОснования = ЗАПРОС( "SELECT ic FROM crosslink WHERE cr_code= ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" );/##CHR(13)##//##CHR(10)##/КодДокументаОснования = ЗАПРОС( "SELECT code FROM crosslink WHERE cr_code = ''023'' AND cr_ic = " + @ИДДокумента + " AND cr_type = ''0'' AND fstorno = 0" ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///сначала проверим, не изменили ли способ расчета в кассовом ордере/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) AND ( ЭтоАванс OR ЭтоПредоплата100 OR ЭтоПредоплатаЧаст ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере выбран способ расчета как Аванс или предоплата, то передадим данные по накладной в данные документа основания, /##CHR(13)##//##CHR(10)##/ //а данные по накладной обнулим, чтобы обработать документ как предоплатный/##CHR(13)##//##CHR(10)##/ IF ( ЭтоПредоплатаЧаст ) //частичную предоплату возможно трансформировать из ПКО, сделанного на основании накладной/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = ИДНакладной;/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = КодНакладной;/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //аванс и предоплату 100% пробиваем одной строкой без привязки к сумме и товарным позициям документа основания, иначе получим ситуацию что чек будет оплачен не полностью/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE IF ( ПУСТО( ИДНакладной ) AND !ПУСТО( ИДДокументаОснования ) AND ( ЭтоАванс OR ЭтоПредоплата100 ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ ИДНакладной = "";/##CHR(13)##//##CHR(10)##/ КодНакладной = "";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///На _основании расходной накладной и вид платежа в кассовом ордере выбран: "Оплата", "полный расчет" или "оплата кредита"/##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИДДокументаОснования ) AND !ПУСТО( ИДНакладной ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Обработка суммы платежа, суммы накладной общей суммы оплат по накладной./##CHR(13)##//##CHR(10)##/ //факты полученных ранее предоплат определяем по таблице сопоставлений документов (необходимо сопоставлять оплаты с Расходной накладной)/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("/##CHR(13)##//##CHR(10)##/ DECLARE @DocSale int, @DocPayment int, @SummaPayment float, @DocSaleSumma float, @SummaPaymentTotal float, @SummaPKOSalePayment float, @SummaPrepayment float, @DocSaleNumber char(20);/##CHR(13)##//##CHR(10)##/ SELECT @DocPayment = " + @ИДДокумента + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @DocSale = " + ИДНакладной + "/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleSumma = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @DocSaleNumber = (SELECT ndok FROM spr" + КодНакладной + " WHERE identity_column = @DocSale)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment = (SELECT ISNULL( SUM( summa ), 0) FROM spr000 WHERE code= ''023'' AND ic = @DocPayment)/##CHR(13)##//##CHR(10)##/ SELECT @SummaPaymentTotal = (SELECT ISNULL( SUM( cl.summa ), 0) FROM crosslink cl/##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = cl.cr_ic/##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.ic = @DocSale AND cl.account_= ''001'' AND cl.cr_type = ''1'')/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPKOSalePayment = (SELECT ISNULL( SUM( summa ), 0) FROM crosslink WHERE code= ''" + КодНакладной + "'' AND ic = @DocSale AND account_= ''001'' AND cr_type = ''1'' AND cr_ic IN /##CHR(13)##//##CHR(10)##/ (SELECT cl.cr_ic FROM crosslink cl /##CHR(13)##//##CHR(10)##/ INNER JOIN spr023 s23 ON s23.identity_column = cl.cr_ic /##CHR(13)##//##CHR(10)##/ INNER JOIN accountlist a ON a.account_ = ''001'' AND a.ic = s23.identity_column /##CHR(13)##//##CHR(10)##/ WHERE a.transacted = 1 AND cl.code= ''" + КодНакладной + "'' AND cl.cr_code = ''023'' AND cl.ic = @DocSale AND cl.account_= ''001'' /##CHR(13)##//##CHR(10)##/ AND cl.cr_type = ''1'' AND CHARINDEX(RTRIM(@DocSaleNumber),s23.note,0) > 0) )/##CHR(13)##//##CHR(10)##/ SELECT @SummaPrepayment = " + ЕСЛИ(КодНакладной=="002", "@SummaPaymentTotal - @SummaPKOSalePayment", "0") + ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SELECT @SummaPayment AS СуммаОплатыПКО, @DocSaleSumma AS СуммаНакладной, @SummaPaymentTotal AS СуммаОплатыОбщая, @SummaPKOSalePayment AS СуммаОплатыПКОПоНакладной, @SummaPrepayment AS СуммаПредоплаты","Оплаты", 1);/##CHR(13)##//##CHR(10)##/ СуммаПКО = Оплаты.СуммаОплатыПКО; //сумма оплаты по текущему кассовому ордеру/##CHR(13)##//##CHR(10)##/ СуммаНакладной = Оплаты.СуммаНакладной; //сумма расходной накладной/##CHR(13)##//##CHR(10)##/ СуммаОплатыОбщая = Оплаты.СуммаОплатыОбщая; //общая сумма оплат накладной (включая сопоставленные предоплаты)/##CHR(13)##//##CHR(10)##/ СуммаОплатыПКОПоНакладной = Оплаты.СуммаОплатыПКОПоНакладной; //сумма оплат, произведенных Приходными кассовыми ордерами, сформированными на основании Расходной накладной/##CHR(13)##//##CHR(10)##/ //Определение ПКО, сформированных на основании Расходной накладной происходит по реквизиту Комментарий (note) документа ПКО, на предмет вхождения в него номера Расходной накладной/##CHR(13)##//##CHR(10)##/ //Во избежание ошибок, поиск комментария осуществляется только среди кассовых ордеров сопоставленных с Расходной накладной./##CHR(13)##//##CHR(10)##/ //(необходимо для получения информации по сумме сопоставленных предоплат)/##CHR(13)##//##CHR(10)##/ СуммаПредоплаты = Оплаты.СуммаПредоплаты; //сумма предоплат, полученных ранее и сопоставленных с Расходной накладной. /##CHR(13)##//##CHR(10)##/ //Рассчитывается как разница между общей суммой оплат и суммой оплат, сформированных на основании накладной./##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 1; //товар/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = false;/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //если в кассовом ордере не выбрали вид оплаты, а оставили стандартный вариант "Оплата", то рассчитываем способ расчета по старому алгоритму/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //а) Если сумма платежа по ПКО равна общей сумме оплат по накладной, то это первая оплата /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО == СуммаОплатыПКОПоНакладной OR СуммаПКО == СуммаОплатыОбщая ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( СуммаОплатыПКОПоНакладной == 0 AND ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПервыйПлатеж = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) или оплата кредита/##CHR(13)##//##CHR(10)##/ //Поскольку могло быть сопоставление предоплаты с накладной, то проверяем и сумму оплат на основании накладной/##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND !ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если сумма оплаты ПКО меньше суммы накладной, то это передача с частичной оплатой (в кредит) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО <= СуммаНакладной AND ПервыйПлатеж )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //Если Сумма оплаты по ПКО или сумма полученных предоплат и сумма ПКО больше либо равны сумме накладной, то это полный расчет/##CHR(13)##//##CHR(10)##/ //и тут же/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО больше или равна сумме накладной, то это передача с полной оплатой (полный расчет) (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ IF ( СуммаПКО + СуммаПредоплаты >= СуммаНакладной )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если указали вид оплаты в ордере, отличный от стандартного/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ЭтоОплата )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 5; //частичный расчет и кредит/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //полный расчет /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО + СуммаПредоплаты - СуммаНакладной;/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не нужно выводить детализацию по товарным позициям при оплате кредита с распределением суммы оплаты по строкам/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //на выходе получаем товары из спецификации Расходной накладной/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==7, "(SELECT code FROM sprkodn WHERE code = ''" + _СТАВКАНДС_БЕЗНДС + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодНакладной + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДНакладной);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Оплата кредита/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаНакладной;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаНакладной > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF (_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = ЕСЛИ( КодНакладной=="055", 5, 0 ); //если на основании возврата поставщику, то "возврат расхода", иначе "приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 AND !ПУСТО(КодНакладной) AND !ПУСТО(ИДНакладной) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА ) //оплата кредита/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Оплата кредита за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодТовара))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 1; //товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (ПУСТО(ПредметРасчетаПозиции) AND !ПУСТО(КодУслуги))/##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 4; //услуга/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль/##CHR(13)##//##CHR(10)##/ IF (КоличествоТовара <> 1)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДопустимоеРасхождение = 0.01; // В соответствии с текущей версией 54-ФЗ/##CHR(13)##//##CHR(10)##/ СумаПозиции = СуммаТовара - СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ // Получаем расчетную цену с учетом скидок делением входящей суммы на входящее количество./##CHR(13)##//##CHR(10)##/ РасчетнаяЦена = ROUND( СумаПозиции / КоличествоТовара, 2);/##CHR(13)##//##CHR(10)##/ // Здесь и далее все цены и суммы округляем до 2 знаков после запятой, количества - до 3 знаков./##CHR(13)##//##CHR(10)##/ // Умножаем входящее количество на расчетную цену и получаем новую промежуточную сумму./##CHR(13)##//##CHR(10)##/ НоваяСумма = VAL( STR( КоличествоТовара * РасчетнаяЦена, 10, 2) );/##CHR(13)##//##CHR(10)##/ // Вычисляем разницу между промежуточной и входящей суммой./##CHR(13)##//##CHR(10)##/ РазницаСумм = НоваяСумма - СумаПозиции;/##CHR(13)##//##CHR(10)##/ // Если разница допустима или разницы нет - оставляем одну строку./##CHR(13)##//##CHR(10)##/ IF (РазницаСумм <= -1*ДопустимоеРасхождение OR РазницаСумм >= ДопустимоеРасхождение)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Иначе, если разница есть и превышает допустимый предел, то разделяем товарную позицию/##CHR(13)##//##CHR(10)##/ // Запоминаем начальные значения./##CHR(13)##//##CHR(10)##/ ТекущееКоличество = КоличествоТовара;/##CHR(13)##//##CHR(10)##/ ТекущаяСкидка = СуммаСкидкиПозиции;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разница есть, то ее делим на копейку./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое нужно переоценить./##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = VAL( STR( РазницаСумм / 0.01, 10, 3) );/##CHR(13)##//##CHR(10)##/ IF ( КоличествоПереоценки < 0 )/##CHR(13)##//##CHR(10)##/ КоличествоПереоценки = -1*КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Цена переоценки во всех примерах отличается от расчетной на 1 копейку./##CHR(13)##//##CHR(10)##/ // В большую или меньшую сторону в зависимости от знака разницы - зависимость обратная./##CHR(13)##//##CHR(10)##/ ЦенаПереоценки = РасчетнаяЦена - VAL( STR( РазницаСумм / КоличествоПереоценки, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Распределяем суммы скидок и НДС пропорционально количеству./##CHR(13)##//##CHR(10)##/ // Если суммы есть. А если их нет, то должно остаться нулевое значение./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокПереоценки = VAL( STR( ТекущаяСкидка * КоличествоПереоценки / ТекущееКоличество, 10, 2) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Из начального количества отнимаем количество переоценки./##CHR(13)##//##CHR(10)##/ // Получаем количество, которое остается по расчетной цене./##CHR(13)##//##CHR(10)##/ КоличествоНовое = КоличествоТовара - КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаНовая = VAL( STR( КоличествоНовое * РасчетнаяЦена, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = ТекущаяСкидка - СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидокНовая = 0;/##CHR(13)##//##CHR(10)##/ // Выводим вместо первоначальной строки две новых./##CHR(13)##//##CHR(10)##/ // Сначала с расчетной ценой и остатком количества./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоНовое, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( РасчетнаяЦена, 16, 2 ) + ", " + STR( СуммаНовая, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидокНовая, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Потом с переоцененной ценой и переоцененным количеством./##CHR(13)##//##CHR(10)##/ // И суммой - произведение цены и количества./##CHR(13)##//##CHR(10)##/ // Пересчитаем данные для второй позиции/##CHR(13)##//##CHR(10)##/ КоличествоТовара = КоличествоПереоценки;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ЦенаПереоценки;/##CHR(13)##//##CHR(10)##/ СуммаТовара = VAL( STR( КоличествоПереоценки * ЦенаПереоценки, 10, 2 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ТекущаяСкидка) )/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = СуммаСкидокПереоценки;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //\\конец форматно-логического контроля/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс;/##CHR(13)##//##CHR(10)##/ //Наименование = "Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //если полный расчет, то оплата может состоять из оплаты наличными равной сумме из ПКО и оплаты по предоплате/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если в ПКО выбрали полный расчет, а сумма ПКО меньше суммы накладной, то недостающую сумму проведем как полученную ранее предоплату. /##CHR(13)##//##CHR(10)##/ //Сумма полученной предоплаты будет равна сумме излишка оплаты (излишек оплаты в такой ситуации получается отрицательным)/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ИзлишекОплаты, 2 ) < 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( -1*ИзлишекОплаты, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если оплата кредита, то оплата состоит только из наличных/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //если частичный расчет и кредит, то оплата может состоять из оплаты наличными равной сумме из ПКО, оплаты по предоплате и остаток оплаты записывается в оплату кредитом/##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПредоплаты, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( СуммаПредоплаты, 16, 2 ) + " )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ СуммаКредит = СуммаНакладной - СуммаПКО - СуммаПредоплаты; /##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаКредит, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( СуммаКредит, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE // другой тип документа основания/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ПКОНААванс = false; //признак того что ПКО сформирован не на основании какого-либо документа/##CHR(13)##//##CHR(10)##/ СуммаПКО = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если ПКО сформирован на основании какого-то документа, то проверим входение документа в список допустимых./##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования)) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверим код документа на принадлежность списку обрабатываемых документов/##CHR(13)##//##CHR(10)##/ IF ( AT( СписокДопустимыхДокументов, КодДокументаОснования) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ //обнулим ИД и Код документа основания, чтобы не обрабатывать информацию из них/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ IF ( СтандартныйВидОплаты ) //если в ПКО не поменяли вид оплаты, а оставили как есть по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЭтоАванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если есть основание для документа, то обрабатываем его/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = ЗАПРОС( "SELECT summa FROM spr000 WHERE code= ''" + КодДокументаОснования + "'' AND ic = " + ИДДокументаОснования );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПКОНААванс = true;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //ПКО сформирован на основании какого-то документа и вид оплаты в кассовом ордере выбрали "Полный расчет"/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО(ИДДокументаОснования) AND !ПУСТО(КодДокументаОснования) AND ЭтоПолныйРасчет) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ КодДокументаОснования = "";/##CHR(13)##//##CHR(10)##/ СуммаДокументаОснования = 0;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = 0;/##CHR(13)##//##CHR(10)##/ //значения по умолчанию для признаков предмета расчета и способа расчета/##CHR(13)##//##CHR(10)##/ //а) если это Аванс/##CHR(13)##//##CHR(10)##/ IF (ЭтоАванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //б) Если сумма оплаты по ПКО больше или равна сумме документа-основания, то это Предоплата 100% (остаток пробиваем как Аванс) /##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПредоплата100 OR ( СуммаПКО >= СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 1; //Предоплата полная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ ИзлишекОплаты = СуммаПКО - ЕСЛИ(СуммаДокументаОснования==0,СуммаПКО,СуммаДокументаОснования);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //в) Если сумма оплаты по ПКО меньше суммы документа-основани, то это частичная предоплата/##CHR(13)##//##CHR(10)##/ ELSE IF ( ( ЭтоПредоплатаЧаст OR ( СуммаПКО < СуммаДокументаОснования AND СуммаДокументаОснования <> 0 ) ) AND !ЭтоПолныйРасчет AND !ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 2; //Предоплата частичная/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплатаКредита )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 7; //Оплата кредита/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоОплата ) //если оставили значение по умолчанию/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 3; //Аванс/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( ЭтоПолныйРасчет )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СпособРасчета = 4; //Полный расчет/##CHR(13)##//##CHR(10)##/ ПредметРасчета = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ AND ( СпособРасчета==1 OR СпособРасчета == 2 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаПР = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаПР + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( _ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИОПЛАТЕКРЕДИТА AND СпособРасчета==7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаОК = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _СТАВКАНДС_БЕЗНДС;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //добавляем обобщенную строку в таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаОК + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Если это предоплата или оплата кредита, то спецификацию трансформируем в таблицу платежей по каждому товару/услуге спецификации с распределением суммы платежа по товарам/##CHR(13)##//##CHR(10)##/ //При частичной оплате формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ SELECT npp, nn, s_code, nnname, /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,1,"kolp") + ", /##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7, "summa", "cena") + ", /##CHR(13)##//##CHR(10)##/ summa,/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ(СпособРасчета==1 OR СпособРасчета == 2 OR СпособРасчета == 7,ПредметРасчета,"CASE WHEN nn <> '''' THEN (SELECT sprres_g.rsubject FROM sprres LEFT OUTER JOIN sprres_g ON sprres.group_ = sprres_g.code WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT sprres_g.rsubject FROM sprservice LEFT OUTER JOIN sprres_g ON sprservice.srvgroup = sprres_g.code WHERE sprservice.code = s_code) END") + ",/##CHR(13)##//##CHR(10)##/ " + СпособРасчета + ",/##CHR(13)##//##CHR(10)##/ " + ЕСЛИ( (СпособРасчета >=1 AND СпособРасчета <= 3) OR СпособРасчета==7,/##CHR(13)##//##CHR(10)##/ "(SELECT code FROM sprkodn WHERE code = ''" + ЕСЛИ( СпособРасчета==7, _СТАВКАНДС_БЕЗНДС, _ККТ_СТАВКАНДСДЛЯАВАНСОВ ) + "'')",/##CHR(13)##//##CHR(10)##/ "(SELECT sprkod.code FROM sprkodn sprkod /##CHR(13)##//##CHR(10)##/ INNER JOIN speclistkodn specn ON specn.list = sprkod.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprlistkodn sprlist ON sprlist.code = specn.code/##CHR(13)##//##CHR(10)##/ WHERE sprlist.code = kodn)") + ",/##CHR(13)##//##CHR(10)##/ CASE WHEN nn <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.code = nn)/##CHR(13)##//##CHR(10)##/ WHEN s_code <> '''' THEN (SELECT kkm_section FROM sprres_g sprres_g/##CHR(13)##//##CHR(10)##/ INNER JOIN sprservice ON sprservice.srvgroup = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprservice.code = s_code) END /##CHR(13)##//##CHR(10)##/ FROM spec" + КодДокументаОснования + "/##CHR(13)##//##CHR(10)##/ WHERE ic = " + ИДДокументаОснования);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //При частичной и полной предоплате, а так же оплате кредита предметом расчета является "Платеж". Тем самым каждая строка товара трансформируется в платеж по каждому товару документа./##CHR(13)##//##CHR(10)##/ //Количество платежа ставим равным 1, а сумму платежа равной сумме строки документа./##CHR(13)##//##CHR(10)##/ //Так же учитываем что общая сумма платежей по строкам не должна превышать общую сумму платежа по ПКО. Если превышает, распределим сумму ПКО по строкам документа/##CHR(13)##//##CHR(10)##/ //Обработает таблицу товаров дополнительно, если это Предоплата частичная или это оплата кредита /##CHR(13)##//##CHR(10)##/ IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //распределим платеж из ПКО по позициям документа/##CHR(13)##//##CHR(10)##/ IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КоэффициентРаспределения = СуммаПКО/СуммаДокументаОснования;/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = 0;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = 1;/##CHR(13)##//##CHR(10)##/ КоличествоСтрокТоваров = ЗАПРОС("SELECT COUNT(*) FROM " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ n = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( n <= КоличествоСтрокТоваров )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = ROUND( summa*" + КоэффициентРаспределения + ", 2)/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ СуммаСтроки = ЗАПРОС("SELECT summa FROM " + ИмяТаблицыТоваров + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + n );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СуммаСтроки > МаксимальнаяСумма )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ МаксимальнаяСумма = СуммаСтроки;/##CHR(13)##//##CHR(10)##/ НомерСтрокиМаксимальнойСуммы = n;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ n++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ИтоговаяСуммаТоваров = ЗАПРОС("SELECT SUM( summa ) FROM " + ИмяТаблицыТоваров );/##CHR(13)##//##CHR(10)##/ IF ( ИтоговаяСуммаТоваров <> СуммаПКО )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET summa = " + ROUND( МаксимальнаяСумма - ( ИтоговаяСуммаТоваров - СуммаПКО ), 2) + "/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ИмяТаблицыТоваров + " /##CHR(13)##//##CHR(10)##/ SET price = summa/##CHR(13)##//##CHR(10)##/ WHERE npp = " + НомерСтрокиМаксимальнойСуммы );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }//IF ( СуммаДокументаОснования > СуммаПКО )/##CHR(13)##//##CHR(10)##/ }//IF ( СпособРасчета == 2 OR СпособРасчета == 7)/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //иначе просто пробиваем сумму из ПКО как аванс (формируем таблицу для пробития с одной строкой как Аванс)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //формируем таблицу товаров по спецификации документа основания/##CHR(13)##//##CHR(10)##/ ЗАПРОС ("INSERT INTO " + ИмяТаблицыТоваров + " ( npp, code, s_code, name, quantity, price, summa, rsubject, rvariant, kodn, department)/##CHR(13)##//##CHR(10)##/ VALUES ( 1, '''', '''', ''" + НаименованиеПредметаРасчетаАванс + "'', 1, " + СуммаПКО + ", " + СуммаПКО + ", " + ПредметРасчета + ", " + СпособРасчета + ", " + КодНалога + ", 1 )" ); /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //пробиваем чек/##CHR(13)##//##CHR(10)##/ _ИМЯКАССИРА = ЗАПРОС("SELECT name FROM sprempl WHERE code = " + froperator);/##CHR(13)##//##CHR(10)##/ _КАССИР = froperator;/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ //если включен запрос параметров при пробитии, то запрашиваем у пользователя: /##CHR(13)##//##CHR(10)##/ //1. почту/телефон покупателя, 2. признак электронного чека, 3. необходимость печати копии/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ОПРЕДЕЛЯТЬАДРЕСОТПРАВКИЧЕКАИЗКЛИЕНТА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента);/##CHR(13)##//##CHR(10)##/ КонтрагентПочта = ALLTRIM( ЗАПРОС("SELECT email FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ КонтрагентТелефон = ALLTRIM( ЗАПРОС("SELECT telefon FROM sprclient WHERE code = ''" + КонтрагентПКО + "''") );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КонтрагентПочта ) )/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентПочта;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ПОЧТА = КонтрагентТелефон;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ IF ( _ККТ_ПАРАМЕТРЫПРИПРОБИТИИЧЕКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ,"ЗАПРОСПАРАМЕТРОВ","''_ККТ_ТИПДОКУМЕНТА'',''_ККТ_АДРЕСПОКУПАТЕЛЯ'',''_ККТ_ЭЛЕКТРОННЫЙЧЕК'',''_ККТ_ПЕЧАТАТЬКОПИЮ''" );/##CHR(13)##//##CHR(10)##/ IF ( _РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = _ККТ_АДРЕСПОКУПАТЕЛЯ;/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = _ККТ_ЭЛЕКТРОННЫЙЧЕК;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = _ККТ_ПЕЧАТАТЬКОПИЮ;/##CHR(13)##//##CHR(10)##/ ТипЧека = VAL(_ККТ_ТИПДОКУМЕНТА);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE //если отказались от ввода параметров, то ничего не отправляем/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПОЧТА = "";/##CHR(13)##//##CHR(10)##/ ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##/ ПЕЧАТАТЬКОПИЮ = false;/##CHR(13)##//##CHR(10)##/ ТипЧека = 0; //"приход"/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ТипЧекаККМ = ВИКИ_ПолучитьКодВидаЧекаВККМ( ТипЧека, false ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, name, quantity, price, destination, echeque )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Открыть чек'', ''" + STDF( FROperatorProfile )+ "'', 1, " + ТипЧекаККМ + ", '''', 0, 0, 0, " + ЕСЛИ( ЭЛЕКТРОННЫЙЧЕК, "1", "0" ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //перенесем строки из таблицы товаров в контекст/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT * FROM " + ИмяТаблицыТоваров, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //проверка и форматно-логический контроль/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "";/##CHR(13)##//##CHR(10)##/ IF ( ( СпособРасчета == 1 OR СпособРасчета == 2 ) AND !ПУСТО( КодДокументаОснования ) AND !ПУСТО( ИДДокументаОснования ) AND !_ККТ_НЕПЕЧАТАТЬДЕТАЛИЗАЦИЮПОТОВАРАМПРИПРЕДОПЛАТЕ ) //предоплата полная или частичная/##CHR(13)##//##CHR(10)##/ ПрефиксНаименованияПозиции = "Предоплата за ";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НомерПП = СписокТоваров.npp;/##CHR(13)##//##CHR(10)##/ КодТовара = СписокТоваров.code;/##CHR(13)##//##CHR(10)##/ КодУслуги = СписокТоваров.s_code;/##CHR(13)##//##CHR(10)##/ Наименование = ПрефиксНаименованияПозиции + СписокТоваров.name;/##CHR(13)##//##CHR(10)##/ КоличествоТовара = СписокТоваров.quantity;/##CHR(13)##//##CHR(10)##/ СуммаТовара = СписокТоваров.summa;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = СписокТоваров.price;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0; //скидки из документов не обрабатываем, берем готовые суммы продажи/##CHR(13)##//##CHR(10)##/ СекцияККМ = СписокТоваров.department;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = СписокТоваров.kodn;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодНалогаККМ ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = СписокТоваров.rsubject;/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = СписокТоваров.rvariant;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //форматно-логический контроль для предоплат и авансов не проводим, т.к. количество в каждой строке равно 1 и расхождения по сумме быть не может/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ } //WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ //удалим таблицу товаров/##CHR(13)##//##CHR(10)##/ ЗАПРОС("DROP TABLE " + ИмяТаблицыТоваров);/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если есть излишек оплаты, то добавляем строку в чек как авансовую/##CHR(13)##//##CHR(10)##/ IF ( ИзлишекОплаты > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КонтрагентПКО = ЗАПРОС("SELECT client FROM spr023 WHERE identity_column = " + @ИДДокумента); /##CHR(13)##//##CHR(10)##/ КонтрагентИмя = ALLTRIM( ЗАПРОС("SELECT name FROM sprclient WHERE code = " + КонтрагентПКО) );/##CHR(13)##//##CHR(10)##/ ОснованиеПлатежа = ALLTRIM( ЗАПРОС("SELECT desc_ FROM spr023 WHERE identity_column = " + @ИДДокумента) ); /##CHR(13)##//##CHR(10)##/ НаименованиеПредметаРасчетаАванс = "Получено от " + КонтрагентИмя + " Основание: " + ОснованиеПлатежа;/##CHR(13)##//##CHR(10)##/ Наименование = НаименованиеПредметаРасчетаАванс; //"Аванс";/##CHR(13)##//##CHR(10)##/ КоличествоТовара = 1;/##CHR(13)##//##CHR(10)##/ ЦенаТоварнойПозиции = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СуммаТовара = ИзлишекОплаты;/##CHR(13)##//##CHR(10)##/ СекцияККМ = 1;/##CHR(13)##//##CHR(10)##/ СуммаСкидкиПозиции = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //НДС/##CHR(13)##//##CHR(10)##/ КодНалогаАйтида = _ККТ_СТАВКАНДСДЛЯАВАНСОВ;/##CHR(13)##//##CHR(10)##/ КодНалогаККМ = ЗАПРОС("SELECT ex_code FROM sprkodn WHERE code = ''" + КодНалогаАйтида + "''");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(КодНалогаККМ) AND _ОПРЕДЕЛЯТЬКОДЫНАЛОГОВ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //берем код налога из карточки налоговой ставки/##CHR(13)##//##CHR(10)##/ КодНалога = КодНалогаККМ;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //заполняем стандартными значениями/##CHR(13)##//##CHR(10)##/ КодНалога = ВИКИ_ПолучитьНалогККМПоКодуНалога( КодНалогаАйтида );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ ПредметРасчетаПозиции = 10; //платеж/выплата/##CHR(13)##//##CHR(10)##/ СпособРасчетаПозиции = 3; //аванс /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, summa, destination, department, discounttype, discountvalue, kodn, rsubject, rvariant )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Регистрация'', ''" + FROperatorProfile + "'', 1, 0, ''" + STDF( Наименование ) + "'', " + STR( КоличествоТовара, 16, 3 ) + ", " + /##CHR(13)##//##CHR(10)##/ STR( ЦенаТоварнойПозиции, 16, 2 ) + ", " + STR( СуммаТовара, 16, 2 ) + ", 0, " + ЕСЛИ( ПУСТО( СекцияККМ ), 1, СекцияККМ ) + ", 0, " + /##CHR(13)##//##CHR(10)##/ STR( СуммаСкидкиПозиции, 16, 3 ) + ", " + КодНалога + ", " + ПредметРасчетаПозиции + ", " + СпособРасчетаПозиции + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //фиксируем оплаты чека/##CHR(13)##//##CHR(10)##/ //При предоплате и авансе суммы последующих и предыдущих оплат не указываются (они указываются при передаче предмета расчета, т.е. при отгрузке),/##CHR(13)##//##CHR(10)##/ //по этой причине в оплатах фиксируем только сумму по ПКО/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаПКО, 2) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаПКО, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //закрываем чек в ККМ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 0, 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##///печатаем чек на ФР/##CHR(13)##//##CHR(10)##/IF ( ПечатьЧекаНаФР( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE spr000 SET f_kkm = 1 WHERE code= ''023'' AND ic = " + @ИДДокумента );/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Чек успешно пробит на ККМ");/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',107.00000000,'// Закрытие чека/##CHR(13)##//##CHR(10)##/_ВСЕГОСКИДКАНАЧЕК = _ВСЕГОСКИДКАНАЧЕК - totaldiscount;/##CHR(13)##//##CHR(10)##/// Параметры - /##CHR(13)##//##CHR(10)##/// СуммаОплаты число вещественное, сумма, полученная от покупателя/##CHR(13)##//##CHR(10)##/// ПроцентСкидки число вещественное, процент скидки на чек/##CHR(13)##//##CHR(10)##/// Параметр - FROperatorProfile число, профиль из карточки сотрудника/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВСЕГОБЕЗНАЛ > 0 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ DriverPayCard = CREATEOBJECT( "AddIn.PayCARD", 1 );/##CHR(13)##//##CHR(10)##/ DriverPayCard.DataTracks = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.ReferenceNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CardNumber = "";/##CHR(13)##//##CHR(10)##/ DriverPayCard.CharLineLength = КоличествоСимволов;/##CHR(13)##//##CHR(10)##/ DriverPayCard.Sum = ВСЕГОБЕЗНАЛ;/##CHR(13)##//##CHR(10)##/ DriverPayCard.TerminalNumber = TerminalNumber;/##CHR(13)##//##CHR(10)##/ IF ( ТипЧека == 0 OR ТипЧека == 6 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( ТипЧека == 1 )/##CHR(13)##//##CHR(10)##/ DriverPayCard.OperationType = 1;/##CHR(13)##//##CHR(10)##/ IF ( !ВыполнитьАвторизацию( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при авторизации банковской карты" );/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ReferenceNumber = DriverPayCard.ReferenceNumber;/##CHR(13)##//##CHR(10)##/ DriverPayCard = false;/##CHR(13)##//##CHR(10)##/ ВСЕГОБЕЗНАЛ = 0;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если тип чека "Прочее/Вскрытие тары", то добавляем только печать нефискальных строк с оплатой /##CHR(13)##//##CHR(10)##/IF ( ТипЧека == 6 ) /##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 0, 0, ''================================================'', 0, 0, 0 )" ); /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, password, mode, checktype, /##CHR(13)##//##CHR(10)##/ name, quantity, price, destination)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Печать строки'', '''', 1, 0, ''ИТОГ: " + STR( СуммаЧека, 16, 2 ) + "'', 0, 0, 0 )" );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation,checktype)/##CHR(13)##//##CHR(10)##/ VALUES ( ''Отрезать чек'', 0 )" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаНал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыНаличные + ", " + STR( СуммаНал + СДАЧА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( СуммаБезнал, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыБезналичные + ", " + STR( СуммаБезнал, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОСЕРТИФИКАТЫ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПредоплата + ", " + STR( ВСЕГОСЕРТИФИКАТЫ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОКРЕДИТ, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыКредит + ", " + STR( ВСЕГОКРЕДИТ, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ IF ( ROUND( ВСЕГОПРОЧАЯОПЛАТА, 2 ) != 0 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Оплата'', " + ККТ_КодВидаОплатыПрочее + ", " + STR( ВСЕГОПРОЧАЯОПЛАТА, 16, 2 ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИмяТаблицыСтрокЧека + " ( operation, closetype, price )/##CHR(13)##//##CHR(10)##/ VALUES ( ''Закрытие чека'', 1, 0 )" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РезультатПробитияЧека = ПечатьЧекаНаФР( );/##CHR(13)##//##CHR(10)##/ЭЛЕКТРОННЫЙЧЕК = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN РезультатПробитияЧека;',0,0,1,0,'10.01.2024 10:09:02') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Профиль ФР Дримкас v.4.4 (Айтида с версии 4.0) (ФН, ФФД 1.05) с платежной системой АТОЛ','ФР',0.00000000,'',0.00000000,7563.00000000,0,'',0.00000000,'','',0,'476A2578-1049-4598-ADA7-770CEEE6A55D',0,1,0,'10.01.2024 10:09:02') #begin #description Обмен данными с POS-терминал Viki POS (маркировка) #name Обмен данными с POS-терминал Viki POS (маркировка) #code 0000000163 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";;;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодПривязки = 1;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( КодПривязки ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ //КодПривязки++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = ЕСЛИ( VAL( warecode ) == 0, "", STR( VAL( warecode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ warecode = warecode_org;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF(ПУСТО(karta))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "41" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ""; // Фронтол 5.9 перестал понимать это поле адекватно ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ sprres.ed, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS alcotype, /##CHR(13)##//##CHR(10)##/ sprres.d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, /##CHR(13)##//##CHR(10)##/ sprres.markgroup, /##CHR(13)##//##CHR(10)##/ sprres.f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS rsubject,/##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code /##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.alcotype ) == 2;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/rsubject = ЕСЛИ( ПУСТО( ТоварИнфо.rsubject ), "0", ТоварИнфо.rsubject ) ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Тип номенклатуры:/##CHR(13)##//##CHR(10)##/0 – обычный товар/##CHR(13)##//##CHR(10)##/1 – алкогольная продукция/##CHR(13)##//##CHR(10)##/2 – изделия из меха/##CHR(13)##//##CHR(10)##/3 – лекарственные препараты/##CHR(13)##//##CHR(10)##/4 – табачная продукция/##CHR(13)##//##CHR(10)##/5 – обувь/##CHR(13)##//##CHR(10)##/6 – лотерея/##CHR(13)##//##CHR(10)##/7 – иная маркированная продукция/##CHR(13)##//##CHR(10)##/8 – фототовары/##CHR(13)##//##CHR(10)##/9 – парфюмерная продукция/##CHR(13)##//##CHR(10)##/10 – шины/##CHR(13)##//##CHR(10)##/11 – товары лёгкой промышленности/##CHR(13)##//##CHR(10)##/12 – альтернативная табачная продукция/##CHR(13)##//##CHR(10)##/101 – табачная продукция (Казахстан)/##CHR(13)##//##CHR(10)##/Значение по умолчанию: 0/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##///Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, 9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак/##CHR(13)##//##CHR(10)##///Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/mMarkGroup = 0; /##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.f_mark )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( ТоварИнфо.markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0000", 0, 7 ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ELSE IF ( ( ПивнаяПродукция OR ( ТоварИнфо.f_mark AND ТоварИнфо.markgroup == "9989" ) ) AND ТоварИнфо.ed_f_volume == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ELSE IF ( ( ПивнаяПродукция OR ( ТоварИнфо.f_mark AND ТоварИнфо.markgroup == "9989" ) ) AND ТоварИнфо.ed_f_volume == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0");/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + //1./##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2./##CHR(13)##//##CHR(10)##/ STDE( mName, 100 ) + ";" + //3./##CHR(13)##//##CHR(10)##/ STDE( mCname, 100 ) + ";" + //4./##CHR(13)##//##CHR(10)##/ mCena + ";" + //5./##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6./##CHR(13)##//##CHR(10)##/ ";" + //7./##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8./##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9./##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10./##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11./##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12. /##CHR(13)##//##CHR(10)##/ rsubject + ";" + //13./##CHR(13)##//##CHR(10)##/ ";" + //14./##CHR(13)##//##CHR(10)##/ ";" + //15./##CHR(13)##//##CHR(10)##/ mParent + ";" + //16./##CHR(13)##//##CHR(10)##/ "1" + ";" + //17./##CHR(13)##//##CHR(10)##/ "0" + ";" + //18./##CHR(13)##//##CHR(10)##/ "0" + ";" + //19./##CHR(13)##//##CHR(10)##/ ";" + //20./##CHR(13)##//##CHR(10)##/ ";" + //21./##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22./##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23./##CHR(13)##//##CHR(10)##/ ";" + //24./##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25./##CHR(13)##//##CHR(10)##/ mArticle + ";" + //26./##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27./##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28./##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29./##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30./##CHR(13)##//##CHR(10)##/ mImage_path + ";" + //31./##CHR(13)##//##CHR(10)##/ mNote + ";" + //32./##CHR(13)##//##CHR(10)##/ ";" + //33./##CHR(13)##//##CHR(10)##/ "0" + ";" + //34./##CHR(13)##//##CHR(10)##/ ";" + //35./##CHR(13)##//##CHR(10)##/ ";" + //36./##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39./##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40./##CHR(13)##//##CHR(10)##/ kodGrPintInvoice + ";" + //41./##CHR(13)##//##CHR(10)##/ kodGrPintMark + ";" + //42./##CHR(13)##//##CHR(10)##/ ";" + //43./##CHR(13)##//##CHR(10)##/ ";" + //44./##CHR(13)##//##CHR(10)##/ ";" + //45./##CHR(13)##//##CHR(10)##/ ";" + //46./##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + //47./##CHR(13)##//##CHR(10)##/ ЛеваяГраница + ";" + //48./##CHR(13)##//##CHR(10)##/ ПраваяГраница + ";"; //49./##CHR(13)##//##CHR(10)##/IF ( mAlco OR ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52. /##CHR(13)##//##CHR(10)##/ mNNVid + ";" + //53./##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55./##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56./##CHR(13)##//##CHR(10)##/ mAProc; //57./##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52./##CHR(13)##//##CHR(10)##/ ";" + //53./##CHR(13)##//##CHR(10)##/ ";" + //54. /##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55./##CHR(13)##//##CHR(10)##/ ";"; //56./##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054" ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ОЖИДАНИЕ( 500 );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФАЙЛСОЗДАТЬ( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с POS-терминал Viki POS (маркировка)','ККМ',0.00000000,'',0.00000000,345.00000000,0,'',0.00000000,'','',0,'6B03378D-4DAE-4B99-9E2D-BC6821986CC6',0,1,0,'16.01.2024 18:41:42') #begin #description Обмен данными с POS-терминал Viki POS (маркировка) (встрытие тары) #name Обмен данными с POS-терминал Viki POS (маркировка) (встрытие тары) #code 0000000199 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'//Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ ''" + ALLTRIM( name ) + "''. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = GetWord( string, ";", ";", 7 );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = GetWord( string, ";", 22 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = ЕСЛИ( VAL( warecode ) == 0, "", STR( VAL( warecode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ warecode = warecode_org;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF(ПУСТО(karta))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "41" AND AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> "18", "008", /##CHR(13)##//##CHR(10)##/ IIF( VAL( dockIndCode ) == 18, "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", "008" ))))))))));/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm /##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !СКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( dockIndCode == "14" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',209.00000000,'// Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка строки товаров в ККМ./##CHR(13)##//##CHR(10)##/// Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( aspecttype == 2 AND f_subres ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/// Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/// Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/mFr_code = ""; // Фронтол 5.9 перестал понимать это поле адекватно ЗАПРОС( "SELECT fr_code FROM " + СПИСОКФР + " WHERE firm= ''" + firm + "''" );/##CHR(13)##//##CHR(10)##/mCode = ALLTRIM( code );/##CHR(13)##//##CHR(10)##/mBarcode = ALLTRIM( barcode );/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS name, /##CHR(13)##//##CHR(10)##/ sprres.ed, /##CHR(13)##//##CHR(10)##/ sprres.nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS alcotype, /##CHR(13)##//##CHR(10)##/ sprres.d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc, /##CHR(13)##//##CHR(10)##/ sprres.markgroup, /##CHR(13)##//##CHR(10)##/ sprres.f_mark,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS rsubject,/##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume/##CHR(13)##//##CHR(10)##/ FROM sprres sprres/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code/##CHR(13)##//##CHR(10)##/ WHERE sprres.maincode = ''" + code + "''", "ТоварИнфо", 1 );/##CHR(13)##//##CHR(10)##/mName = ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), ТоварИнфо.name );/##CHR(13)##//##CHR(10)##/mAlco = VAL( ТоварИнфо.alcotype ) == 1;/##CHR(13)##//##CHR(10)##/РазливнойАлко = mAlco AND LOWER( ALLTRIM( ТоварИнфо.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ПивнаяПродукция = VAL( ТоварИнфо.alcotype ) == 2;/##CHR(13)##//##CHR(10)##/mNNVid = ТоварИнфо.nnvid;/##CHR(13)##//##CHR(10)##/mVolume = STR( ТоварИнфо.d_litr, 10, 6 );/##CHR(13)##//##CHR(10)##/mAProc = STR( ТоварИнфо.a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/rsubject = ЕСЛИ( ПУСТО( ТоварИнфо.rsubject ), "0", ТоварИнфо.rsubject ) ;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/Тип номенклатуры:/##CHR(13)##//##CHR(10)##/0 – обычный товар/##CHR(13)##//##CHR(10)##/1 – алкогольная продукция/##CHR(13)##//##CHR(10)##/2 – изделия из меха/##CHR(13)##//##CHR(10)##/3 – лекарственные препараты/##CHR(13)##//##CHR(10)##/4 – табачная продукция/##CHR(13)##//##CHR(10)##/5 – обувь/##CHR(13)##//##CHR(10)##/6 – лотерея/##CHR(13)##//##CHR(10)##/7 – иная маркированная продукция/##CHR(13)##//##CHR(10)##/8 – фототовары/##CHR(13)##//##CHR(10)##/9 – парфюмерная продукция/##CHR(13)##//##CHR(10)##/10 – шины/##CHR(13)##//##CHR(10)##/11 – товары лёгкой промышленности/##CHR(13)##//##CHR(10)##/12 – альтернативная табачная продукция/##CHR(13)##//##CHR(10)##/101 – табачная продукция (Казахстан)/##CHR(13)##//##CHR(10)##/Значение по умолчанию: 0/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##///Код группы маркируемого товара 0005 - табачная продукция, 1520 - обувь, 0002 - изделия из меха, 0003 - лекарственные препараты, 9999 - прочая, 9998 - легпром, 9997 - шины, 9996 - фото, 9995 - духи и парфюм, 9994 - альтернативный табак/##CHR(13)##//##CHR(10)##///Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/mMarkGroup = 0; /##CHR(13)##//##CHR(10)##/IF ( ТоварИнфо.f_mark )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( ТоварИнфо.markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( ТоварИнфо.markgroup == "0000", 0, 7 ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ELSE IF ( ( ПивнаяПродукция OR ( ТоварИнфо.f_mark AND ТоварИнфо.markgroup == "9989" ) ) AND ТоварИнфо.ed_f_volume == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ELSE IF ( ( ПивнаяПродукция OR ( ТоварИнфо.f_mark AND ТоварИнфо.markgroup == "9989" ) ) AND ТоварИнфо.ed_f_volume == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "ТоварИнфо" );/##CHR(13)##//##CHR(10)##/// Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##/mCname = ALLTRIM( cname );/##CHR(13)##//##CHR(10)##/mCena = ALLTRIM( STR( cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##///------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##///------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##///------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/IF ( !ТОВАРЫБЕЗЦЕНЫ AND mCena <= 0 AND !f_hchild ) RETURN true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/// Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/// Код схемы разрезов/##CHR(13)##//##CHR(10)##/mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/// Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/// Код родительской группы/##CHR(13)##//##CHR(10)##/mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/// Код налога/##CHR(13)##//##CHR(10)##/mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "0" );/##CHR(13)##//##CHR(10)##/// Артикул/##CHR(13)##//##CHR(10)##/mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/// Путь к картинке/##CHR(13)##//##CHR(10)##/mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/mNote = STDE( note );/##CHR(13)##//##CHR(10)##/mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/// Принтер для печати чеков/##CHR(13)##//##CHR(10)##/mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/mFlags = ЕСЛИ( fractqty OR waretype == 0 OR РазливнойАлко, "1", "0");/##CHR(13)##//##CHR(10)##/mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/// Остаток и PLU/##CHR(13)##//##CHR(10)##/mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/mDsc_value = "";/##CHR(13)##//##CHR(10)##/mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодСправочника = ЕСЛИ( cat == "001", "S02", "S05" );/##CHR(13)##//##CHR(10)##/ kodGrPintChek = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиЧека'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиКопии'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintInvoice = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиСчета'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ kodGrPintMark = Запрос ("SELECT dbo.fn_getchar_ex ( ''SPR'', ''" + КодСправочника + "'', ''КодГруппыПечатиМарки'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ vizualmodif = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ЛеваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/ ПраваяГраница = Запрос("SELECT dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', ''" + nn + "'', DEFAULT, DEFAULT, DEFAULT)");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Строка = mCode + ";" + //1./##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2./##CHR(13)##//##CHR(10)##/ STDE( mName, 100 ) + ";" + //3./##CHR(13)##//##CHR(10)##/ STDE( mCname, 100 ) + ";" + //4./##CHR(13)##//##CHR(10)##/ mCena + ";" + //5./##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6./##CHR(13)##//##CHR(10)##/ ";" + //7./##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8./##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9./##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10./##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11./##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12./##CHR(13)##//##CHR(10)##/ rsubject + ";" + //13./##CHR(13)##//##CHR(10)##/ ";" + //14./##CHR(13)##//##CHR(10)##/ ";" + //15./##CHR(13)##//##CHR(10)##/ mParent + ";" + //16./##CHR(13)##//##CHR(10)##/ "1" + ";" + //17./##CHR(13)##//##CHR(10)##/ "0" + ";" + //18./##CHR(13)##//##CHR(10)##/ "0" + ";" + //19./##CHR(13)##//##CHR(10)##/ ";" + //20./##CHR(13)##//##CHR(10)##/ ";" + //21./##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22./##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23./##CHR(13)##//##CHR(10)##/ ";" + //24./##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25./##CHR(13)##//##CHR(10)##/ mArticle + ";" + //26./##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27./##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28./##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29./##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30./##CHR(13)##//##CHR(10)##/ mImage_path + ";" + //31./##CHR(13)##//##CHR(10)##/ mNote + ";" + //32./##CHR(13)##//##CHR(10)##/ ";" + //33./##CHR(13)##//##CHR(10)##/ "0" + ";" + //34./##CHR(13)##//##CHR(10)##/ ";" + //35./##CHR(13)##//##CHR(10)##/ ";" + //36./##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39./##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40./##CHR(13)##//##CHR(10)##/ kodGrPintInvoice + ";" + //41./##CHR(13)##//##CHR(10)##/ kodGrPintMark + ";" + //42./##CHR(13)##//##CHR(10)##/ ";" + //43./##CHR(13)##//##CHR(10)##/ ";" + //44./##CHR(13)##//##CHR(10)##/ ";" + //45./##CHR(13)##//##CHR(10)##/ ";" + //46./##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + //47./##CHR(13)##//##CHR(10)##/ ЛеваяГраница + ";" + //48./##CHR(13)##//##CHR(10)##/ ПраваяГраница + ";"; //49./##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/IF ( ( mAlco OR ПивнаяПродукция ) AND !РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52./##CHR(13)##//##CHR(10)##/ mNNVid + ";" + //53./##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55./##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56./##CHR(13)##//##CHR(10)##/ mAProc; //57./##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //Обычный товар/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52./##CHR(13)##//##CHR(10)##/ ";" + //53./##CHR(13)##//##CHR(10)##/ ";" + //54./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55./##CHR(13)##//##CHR(10)##/ ";"; //56./##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + //1./##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2./##CHR(13)##//##CHR(10)##/ STDE( "ВТ " + mName, 100 ) + ";" + //3./##CHR(13)##//##CHR(10)##/ STDE( "ВТ " + mCname, 100 ) + ";" + //4./##CHR(13)##//##CHR(10)##/ mCena + ";" + //5./##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6./##CHR(13)##//##CHR(10)##/ ";" + //7./##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8./##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9./##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10./##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11./##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12./##CHR(13)##//##CHR(10)##/ "0" + ";" + //13./##CHR(13)##//##CHR(10)##/ ";" + //14./##CHR(13)##//##CHR(10)##/ ";" + //15./##CHR(13)##//##CHR(10)##/ mParent + ";" + //16./##CHR(13)##//##CHR(10)##/ "1" + ";" + //17./##CHR(13)##//##CHR(10)##/ "0" + ";" + //18./##CHR(13)##//##CHR(10)##/ "0" + ";" + //19./##CHR(13)##//##CHR(10)##/ ";" + //20./##CHR(13)##//##CHR(10)##/ ";" + //21/##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22./##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23./##CHR(13)##//##CHR(10)##/ ";" + //24./##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25./##CHR(13)##//##CHR(10)##/ "Для вскрытия тары" + ";" + //26./##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27./##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28./##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29./##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30./##CHR(13)##//##CHR(10)##/ mImage_path + ";" + //31./##CHR(13)##//##CHR(10)##/ mNote + ";" + //32./##CHR(13)##//##CHR(10)##/ ";" + //33./##CHR(13)##//##CHR(10)##/ "0" + ";" + //34./##CHR(13)##//##CHR(10)##/ ";" + //35./##CHR(13)##//##CHR(10)##/ ";" + //36./##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39./##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40./##CHR(13)##//##CHR(10)##/ kodGrPintInvoice + ";" + //41./##CHR(13)##//##CHR(10)##/ kodGrPintMark + ";" + //42./##CHR(13)##//##CHR(10)##/ ";" + //43./##CHR(13)##//##CHR(10)##/ ";" + //44./##CHR(13)##//##CHR(10)##/ ";" + //45./##CHR(13)##//##CHR(10)##/ ";" + //46./##CHR(13)##//##CHR(10)##/ vizualmodif + ";" + //47./##CHR(13)##//##CHR(10)##/ ЛеваяГраница + ";" + //48./##CHR(13)##//##CHR(10)##/ ПраваяГраница + ";"; //49./##CHR(13)##//##CHR(10)##/ IF ( mAlco OR ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52./##CHR(13)##//##CHR(10)##/ mNNVid + ";" + //53./##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54./##CHR(13)##//##CHR(10)##/ "1" + ";" + //55./##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56./##CHR(13)##//##CHR(10)##/ mAProc; //57./##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ";" + //50./##CHR(13)##//##CHR(10)##/ ";" + //51./##CHR(13)##//##CHR(10)##/ ";" + //52./##CHR(13)##//##CHR(10)##/ ";" + //53./##CHR(13)##//##CHR(10)##/ ";" + //54./##CHR(13)##//##CHR(10)##/ ";" + //55./##CHR(13)##//##CHR(10)##/ ";"; //56./##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) AND ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054" ))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON temp.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ obj.discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), "1;" + Процент, Строка + ";" + СписокХар + ";" + Строка2 ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НомерПоПорядку ) + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_checkdone )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";;;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ КодПривязки = 1;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ //ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( КодПривязки ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ //КодПривязки++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + VAL( ВидОплатОперация ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( Комментарий ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";;" + /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" +/##CHR(13)##//##CHR(10)##/ "0.00;0.000;;;0.00;" + DTOC( DATE( ) ) + ";0;0;0;0;0;" +/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) +/##CHR(13)##//##CHR(10)##/ ";0;0;0;;;0;0;0;;;;;;;;;;0";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'16.01.2024 18:41:42') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с POS-терминал Viki POS (маркировка) (встрытие тары)','ККМ',0.00000000,'',0.00000000,7317.00000000,0,'',0.00000000,'','',0,'D8E494BE-B404-4621-90D8-BA8308A75DBE',0,1,0,'16.01.2024 18:41:42') #begin #description Обмен данными с Фронтол 6 #name Обмен данными с Фронтол 6 #code 0000000155 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлОтветаФронтол = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) ) + "LoadResult.txt";/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52 = false; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ОШИБКА: " + _ERRORCODE + CHR(13) + "ОПИСАНИЕ: " + _ERRORDESCRIPTION);/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если установлен признак очистки, то передадим команды удаления всех налоговых групп и ставок/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //удалить все налоговые ставки/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXRATES" );/##CHR(13)##//##CHR(10)##/ //удалить все налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ //удалить все налоговые ставки группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после того как загрузили налоги, нужно передать 2 настройки для налогов поумолчанию,/##CHR(13)##//##CHR(10)##/ //т.к. после очистки налогов в ККМ эти настройки сбрасываются/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выбираем первую ставку из налоговых ставок, с наименьшим кодом и налоговой ставкой/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT TOP 1 code, list/##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = (SELECT TOP 1 code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_, code) /##CHR(13)##//##CHR(10)##/ AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СписокНалогов");/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокНалогов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDSETTINGS" );/##CHR(13)##//##CHR(10)##/ //Код налоговой группы по умолчанию для регистрации по свободной цене/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "TaxGroupDefaultFreeID" + ";" + STR( VAL( СписокНалогов.code ) ) );/##CHR(13)##//##CHR(10)##/ //Код налоговой группы по умолчанию для регистрации по коду/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "TaxGroupDefaultCodeID" + ";" + STR( VAL( СписокНалогов.code ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //очистка реквизитов агента при установке флага очистки ККМ перед загрузкой/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, inn, legal_adress, telefon, agent_type, agent_oper, agent_telephone_pa, agent_name_op, agent_inn_op, agent_address_op, agent_telephone_op, agent_telephone_pp/##CHR(13)##//##CHR(10)##/ FROM sprclient /##CHR(13)##//##CHR(10)##/ WHERE code IN (SELECT sprres.vendor FROM sprres sprres/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code AND sprres.f_agentware = 1 )","ПоставщикиАгенты");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("ПоставщикиАгенты") > 0)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "ПоставщикиАгенты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем строку реквизитов, только обязательными для конкретного типа агента реквизитами для того чтобы правильно формировались тэги в чеке/##CHR(13)##//##CHR(10)##/ IF ( VAL(ПоставщикиАгенты.agent_type) == 0 OR VAL(ПоставщикиАгенты.agent_type) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";;;;;" + LEFT( ПоставщикиАгенты.agent_telephone_pp , 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 2 OR VAL(ПоставщикиАгенты.agent_type) == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( ПоставщикиАгенты.agent_oper ), 24 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";" + LEFT ( ПоставщикиАгенты.agent_name_op, 64 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT ( ПоставщикиАгенты.agent_inn_op, 10) + ";" + LEFT( ПоставщикиАгенты.agent_address_op , 256 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_op , 100 ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 4 OR VAL(ПоставщикиАгенты.agent_type) == 5 OR VAL(ПоставщикиАгенты.agent_type) == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;;;;;;;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СтрокаПоставщика))/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СтрокаПоставщика );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ПоставщикиАгенты" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";" + //1. идентификатор/##CHR(13)##//##CHR(10)##/ ";" + //2. /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //3. наименование/##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //4. текст/##CHR(13)##//##CHR(10)##/ ";" + //5. /##CHR(13)##//##CHR(10)##/ ";" + //6. /##CHR(13)##//##CHR(10)##/ ";" + //7. не используется/##CHR(13)##//##CHR(10)##/ ";" + //8. /##CHR(13)##//##CHR(10)##/ "0.00" + ";" + //9. минимальная цена/##CHR(13)##//##CHR(10)##/ ";" + //10. /##CHR(13)##//##CHR(10)##/ "0" + ";" + //11. код схемы разрезов/##CHR(13)##//##CHR(10)##/ ";" + //12. /##CHR(13)##//##CHR(10)##/ ";" + //13. /##CHR(13)##//##CHR(10)##/ ";" + //14. /##CHR(13)##//##CHR(10)##/ ";" + //15. не используется/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) + ";" + //16.код родительской группы/##CHR(13)##//##CHR(10)##/ "0" + ";" + //17. товар или группа. "0" для группы/##CHR(13)##//##CHR(10)##/ ";" + //18. /##CHR(13)##//##CHR(10)##/ ";" + //19. /##CHR(13)##//##CHR(10)##/ ";" + //20. /##CHR(13)##//##CHR(10)##/ ";" + //21. /##CHR(13)##//##CHR(10)##/ ";" + //22. /##CHR(13)##//##CHR(10)##/ ";" + //23. код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. /##CHR(13)##//##CHR(10)##/ ";" + //25. /##CHR(13)##//##CHR(10)##/ ";" + //26. артикул/##CHR(13)##//##CHR(10)##/ ";" + //27. тип скидки/##CHR(13)##//##CHR(10)##/ ";" + //28. значение скидки/##CHR(13)##//##CHR(10)##/ ";" + //29. максимальная скидка/##CHR(13)##//##CHR(10)##/ ";" + //30. /##CHR(13)##//##CHR(10)##/ ";" + //31. файл с картинкой/##CHR(13)##//##CHR(10)##/ ";" + //32. описание/##CHR(13)##//##CHR(10)##/ ";" + //33. /##CHR(13)##//##CHR(10)##/ ";" + //34. /##CHR(13)##//##CHR(10)##/ ";" + //35. /##CHR(13)##//##CHR(10)##/ ";" + //36. /##CHR(13)##//##CHR(10)##/ ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ ";" + //39. код группы печати чека/##CHR(13)##//##CHR(10)##/ ";" + //40. код группы печати копии/##CHR(13)##//##CHR(10)##/ ";" + //41. код группы печати счета/##CHR(13)##//##CHR(10)##/ ";" + //42. код группы печати марки/##CHR(13)##//##CHR(10)##/ ";"; //43. код предприятия/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьПризнакЗагрузки = ЕСЛИ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ, f_checkdone, ЗАПРОС("SELECT f_checkdone_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроверятьПризнакЗагрузки )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/СтавкаБезНДС = ЗАПРОС( "SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM sprlistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = ( SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = ( SELECT TOP 1 code FROM/##CHR(13)##//##CHR(10)##/ sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype = '''' ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодФирмыОборудования = ЗАПРОС("SELECT firm FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##///если заполнена фирма в оборудовании, то определяем признак не плательщика НДС из выбранной фирмы/##CHR(13)##//##CHR(10)##///иначе берем выбранныю фирму в группе ресурсов/##CHR(13)##//##CHR(10)##/ЧастьЗапросаФирмаБезНДС = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( КодФирмыОборудования ) )/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = ''" + КодФирмыОборудования + "'' ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = temp.firm ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в группе ресурсов не указана фирма, а указан код ФР и заполнен список фирм в оборудовании, то второй запрос поменять на/##CHR(13)##//##CHR(10)##///ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = (SELECT TOP 1 firm FROM " + СПИСОКФР + " WHERE fr_code = temp.nkkm ) ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##/ЧастьЗапросаРеквизитовАгента = "";/##CHR(13)##//##CHR(10)##/mAgentDetailsCode = "";/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента = ", sprres.f_agentware AS sprres_f_agentware, sprres.vendor AS sprres_vendor "/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Подготовка к формированию файла выгрузки");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname,/##CHR(13)##//##CHR(10)##/ sprres.nnvid AS sprres_nnvid,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype,/##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), 0 ) AS spregais_d_litr,/##CHR(13)##//##CHR(10)##/ sprres.d_litr AS sprres_d_litr,/##CHR(13)##//##CHR(10)##/ sprres.a_proc AS sprres_a_proc,/##CHR(13)##//##CHR(10)##/ sprres.ed AS sprres_ed,/##CHR(13)##//##CHR(10)##/ (SELECT ffdcode FROM spredn WHERE code = sprres.ed) AS ffdcode,/##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS spr_rsubject,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.paytype, '''' ) AS spr_paytype,/##CHR(13)##//##CHR(10)##/ sprres.f_make AS sprres_f_make,/##CHR(13)##//##CHR(10)##/ sprres.cat AS sprres_cat,/##CHR(13)##//##CHR(10)##/ sprres.markgroup AS sprres_markgroup,/##CHR(13)##//##CHR(10)##/ sprres.f_mark AS sprres_f_mark,/##CHR(13)##//##CHR(10)##/ sprres.f_marknotrequire AS sprres_f_marknotrequire,/##CHR(13)##//##CHR(10)##/ sprres.f_draft AS sprres_f_draft,/##CHR(13)##//##CHR(10)##/ sprres.gtin AS sprres_gtin,/##CHR(13)##//##CHR(10)##/ sprres.enterprice AS sprres_enterprice,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex(''SPR'', ''S02'', ''ФронтолБезВводаКоличества'', sprres.code, '''', '''', '''' ), 0 ) AS noenterquantity,/##CHR(13)##//##CHR(10)##/ (SELECT TOP 1 fr_code FROM " + СПИСОКФР + " WHERE firm = temp.firm) AS tovar_firm " +/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС + /##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintChek,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintCopy,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintInvoice,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintMark "; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS vizualmodif,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ЛеваяГраница,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ПраваяГраница ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса += " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode /##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Формирование файла выгрузки");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND СписокТоваров.f_subres )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, СписокТоваров.tovar_firm ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ mBarcode = ALLTRIM( СписокТоваров.barcode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rsubject = СписокТоваров.spr_rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СписокТоваров.spr_paytype ) == 1 OR VAL( СписокТоваров.spr_paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ mPaytype = СписокТоваров.spr_paytype;/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ mPaytype = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), sprres_shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.sprres_nnvid, "481" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.sprres_nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ЕСЛИ( VAL( СписокТоваров.spregais_d_litr ) != 0, СписокТоваров.spregais_d_litr, СписокТоваров.sprres_d_litr ), 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( СписокТоваров.sprres_a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ mEnterPrice = СписокТоваров.sprres_enterprice;/##CHR(13)##//##CHR(10)##/ mNoEnterquantity = СписокТоваров.noenterquantity;/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //значение по умолчанию - обычный товар/##CHR(13)##//##CHR(10)##/ mSIZmark = "";/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара:/##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, /##CHR(13)##//##CHR(10)##/ //1520 - обувь, /##CHR(13)##//##CHR(10)##/ //0002 - изделия из меха, /##CHR(13)##//##CHR(10)##/ //0003 - лекарственные препараты, /##CHR(13)##//##CHR(10)##/ //9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, /##CHR(13)##//##CHR(10)##/ //9997 - шины, /##CHR(13)##//##CHR(10)##/ //9996 - фото, /##CHR(13)##//##CHR(10)##/ //9995 - духи и парфюм, /##CHR(13)##//##CHR(10)##/ //9994 - альтернативный табак, /##CHR(13)##//##CHR(10)##/ //9993 - молочная продукция, /##CHR(13)##//##CHR(10)##/ //9992 - вода/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //9990 - никотинсодержащая продукция/##CHR(13)##//##CHR(10)##/ //9989 - пиво и пивные напитки/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.sprres_markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9993", 13, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9991", 14, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9992", 15, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9990", 16,/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0000", 0, 7 ) ) ) ) ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для СИЗ передадим код из поля GTIN в 64 поле/##CHR(13)##//##CHR(10)##/ mSIZmark = ЕСЛИ( СписокТоваров.sprres_markgroup == "0000", СписокТоваров.sprres_gtin, "");/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = ЕСЛИ( СписокТоваров.sprres_f_marknotrequire,1,0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //обычный товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 2 ) //подакцизный товар/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 3 ) //работа/##CHR(13)##//##CHR(10)##/ rsubject = "3";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 4 ) //услуга/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 13 ) //иной предмет расчета/##CHR(13)##//##CHR(10)##/ rsubject = "6";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 10 ) //платеж/##CHR(13)##//##CHR(10)##/ rsubject = "7"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 11 ) //агентское вознаграждение/##CHR(13)##//##CHR(10)##/ rsubject = "8"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 7 ) //лотерейный билет/##CHR(13)##//##CHR(10)##/ rsubject = "9"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 9 ) //результаты интеллектуальной деятельности/##CHR(13)##//##CHR(10)##/ rsubject = "10";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 12 ) //выплата/##CHR(13)##//##CHR(10)##/ rsubject = "11";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 18 ) //курортный сбор/##CHR(13)##//##CHR(10)##/ rsubject = "12";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 27 ) //выдача денежных средств/##CHR(13)##//##CHR(10)##/ rsubject = "13";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_agentware == true AND !ПУСТО(СписокТоваров.sprres_vendor) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAgentDetailsCode = VAL(СписокТоваров.sprres_vendor);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СписокТоваров.ffdcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.ffdcode == 0 )/##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 10 )/##CHR(13)##//##CHR(10)##/ mffdcode = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 11 )/##CHR(13)##//##CHR(10)##/ mffdcode = 2; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 12 )/##CHR(13)##//##CHR(10)##/ mffdcode = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 20 )/##CHR(13)##//##CHR(10)##/ mffdcode = 4; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 21 )/##CHR(13)##//##CHR(10)##/ mffdcode = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 22 )/##CHR(13)##//##CHR(10)##/ mffdcode = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 30 )/##CHR(13)##//##CHR(10)##/ mffdcode = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 31 )/##CHR(13)##//##CHR(10)##/ mffdcode = 8;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 32 )/##CHR(13)##//##CHR(10)##/ mffdcode = 9;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 40 )/##CHR(13)##//##CHR(10)##/ mffdcode = 10; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 41 )/##CHR(13)##//##CHR(10)##/ mffdcode = 11; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 42 )/##CHR(13)##//##CHR(10)##/ mffdcode = 12;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 50 )/##CHR(13)##//##CHR(10)##/ mffdcode = 13;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 51 )/##CHR(13)##//##CHR(10)##/ mffdcode = 14; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 70 )/##CHR(13)##//##CHR(10)##/ mffdcode = 15; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 71 )/##CHR(13)##//##CHR(10)##/ mffdcode = 16; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 72 )/##CHR(13)##//##CHR(10)##/ mffdcode = 17; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 73 )/##CHR(13)##//##CHR(10)##/ mffdcode = 18;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 80 )/##CHR(13)##//##CHR(10)##/ mffdcode = 19; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 81 )/##CHR(13)##//##CHR(10)##/ mffdcode = 20; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 82 )/##CHR(13)##//##CHR(10)##/ mffdcode = 21; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 83 )/##CHR(13)##//##CHR(10)##/ mffdcode = 22; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 255 )/##CHR(13)##//##CHR(10)##/ mffdcode = 23; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( СписокТоваров.cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( mCena ) <= 0 AND !f_hchild )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/ //если в карточке фирмы установлен флаг "Не является плательщиком НДС", то выгружаем ставку БезНДС для товара/##CHR(13)##//##CHR(10)##/ IF ( f_nalogs AND firm_fwonds )/##CHR(13)##//##CHR(10)##/ mKodn = ALLTRIM( STR( VAL( СтавкаБезНДС ) ) );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = STDE( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mFlags = ЕСЛИ( fractqty OR waretype == 0, "1", "0" ) + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "1" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "1" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty OR !mNoEnterquantity, "0", "1" ) + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ "1" + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ "," + //11. скидки/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mEnterPrice, "1", "" ) + "," + //12. запрос цены/##CHR(13)##//##CHR(10)##/ "," + //13. запрос штрихкода/##CHR(13)##//##CHR(10)##/ "," + //14. округление/##CHR(13)##//##CHR(10)##/ ","; //15. деление упаковки /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/ IF ( !_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" //1. Идентификатор товара (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + mBarcode + ";" //2. Штрихкод (Строка 1024)/##CHR(13)##//##CHR(10)##/ + STDE( mName, 100 ) + ";" //3. Наименование (Строка 128)/##CHR(13)##//##CHR(10)##/ + STDE( mCname, 100 ) + ";" //4. Наименование для печати (Строка 128)/##CHR(13)##//##CHR(10)##/ + mCena + ";" //5. Цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mTmcSaldo + ";" //6. Остаток (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //7. - (Целое)/##CHR(13)##//##CHR(10)##/ + mFlags + ";" //8. флаги (Строка)/##CHR(13)##//##CHR(10)##/ + mMin_cena + ";" //9. минимальная цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mStore_period + ";" //10. срок годности (Дата)/##CHR(13)##//##CHR(10)##/ + mAspect_sch + ";" //11. код схемы разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + mAspect_var + ";" //12. вариант использования разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + rsubject + ";" //13. признак предмета расчета (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //14. коэффициент штрихкода (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //15. - (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + mParent + ";" //16. Код родительской группы (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + "1;" //17. товар или группа: 0 - группа, 1 - товар (Целое 1)/##CHR(13)##//##CHR(10)##/ + ";" //18. - (Целое)/##CHR(13)##//##CHR(10)##/ + "0;" //19. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //20. серия (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //21. сертификат (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //22. - (Целое)/##CHR(13)##//##CHR(10)##/ + mKodn + ";" //23. Код налоговой группы (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //24. Код весов с ПЭ (Целое, по умолчанию = 0)/##CHR(13)##//##CHR(10)##/ + mPlu + ";" //25. Код товара в весах ПЭ. (Целое, max = 999999999)/##CHR(13)##//##CHR(10)##/ + mArticle + ";" //26. Артикул (Строка 20)/##CHR(13)##//##CHR(10)##/ + mVtype + ";" //27. Тип скидки (Целое, 0-процентная, м.б. только %-я)/##CHR(13)##//##CHR(10)##/ + mDsc_value + ";" //28. Значение скидки (строка 100)/##CHR(13)##//##CHR(10)##/ + mActionPriz + ";" //29. Максимальная скидка (Дробное)/##CHR(13)##//##CHR(10)##/ + mCheckPrinter + ";" //30. Код группы печати (Целое, особенности в рук.интегратора)/##CHR(13)##//##CHR(10)##/ + mImage_path + ";" //31. Файл с картинкой (Строка) *.bmp, *.jpg, *.jpeg, *.wmf, *.ico, *.emf, *.svg, *.png/##CHR(13)##//##CHR(10)##/ + mNote + ";" //32. Описание (строка)/##CHR(13)##//##CHR(10)##/ + ";" //33. Кратность количества (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + "0;" //34. Код ценника (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //35. Тип вознаграждения (Целое). 0- процентное, 1- суммовое. По умолчанию =0/##CHR(13)##//##CHR(10)##/ + ";" //36. Значение вознаграждения (Дробное)/##CHR(13)##//##CHR(10)##/ + mKkm_section + ";" //37. Номер секции ККМ (Целое, max = 99). По умолчанию =0 /##CHR(13)##//##CHR(10)##/ + ";" //38. ГТД (строка 100)/##CHR(13)##//##CHR(10)##/ + kodGrPintChek + ";" //39. Код группы печати чека (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintCopy + ";" //40. Код группы печати копии (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintInvoice + ";" //41. Код группы печати счета (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintMark + ";" //42. Код группы печати марки (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //43. Код предприятия (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //44. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //45. Номер сообщения в весах с ПЭ (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //46. - /##CHR(13)##//##CHR(10)##/ + vizualmodif + ";" //47. Значение флага "Визуальный выбор модификаторов при регистрации" (Целое)/##CHR(13)##//##CHR(10)##/ + ЛеваяГраница + ";" //48. Левая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ПраваяГраница + ";" //49. Правая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //50. Текстовое сообщение для весов с ПЭ (строка)/##CHR(13)##//##CHR(10)##/ + ";" //51. -/##CHR(13)##//##CHR(10)##/ + mF_marknotrequire + ";"; //52. Значение флага «Разрешить регистрацию без штрихкода маркировки» (Целое)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( mAlco OR ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += mNNVid + ";" //53. Код вида алкогольной / спиртосодержащей продукции Значение по умолчанию: 10. (Целое)/##CHR(13)##//##CHR(10)##/ + mVolume + ";" //54. Емкость тары, л Значение по умолчанию: 1,000. (Дробное 10.6)/##CHR(13)##//##CHR(10)##/ + mMarkGroup + ";" //55. Тип номенклатуры (Целое)/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" //56. Маркировка алкогольной продукции (Целое)/##CHR(13)##//##CHR(10)##/ + mAProc + ";"; //57. Крепость алкогольной продукции, % (Дробное). Значение по умолчанию: 0,1/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ";" //53. Код вида алкогольной / спиртосодержащей продукции Значение по умолчанию: 10. (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //54. Емкость тары, л Значение по умолчанию: 1,000. (Дробное 10.6)/##CHR(13)##//##CHR(10)##/ + mMarkGroup + ";" //55. Тип номенклатуры (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //56. Маркировка алкогольной продукции (Целое)/##CHR(13)##//##CHR(10)##/ + ";"; //57. Крепость алкогольной продукции, % (Дробное). Значение по умолчанию: 0,1/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка += mPaytype + ";" //58.Признак способа расчета: 1 – аванс; 2 – полный расчет. Значение по умолчанию: 2./##CHR(13)##//##CHR(10)##/ + ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" //59. Код реквизитов агента (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //60. Сумма акциза (Дробное)/##CHR(13)##//##CHR(10)##/ + ";" //61. Код страны происхождения товара (Строка 3)/##CHR(13)##//##CHR(10)##/ + ";" //62. Номер таможенной декларации (Строка 32)/##CHR(13)##//##CHR(10)##/ + ";" //63. Наименование лотереи (Целое)/##CHR(13)##//##CHR(10)##/ + mSIZmark + ";" //64. Код вида номенклатурной классификации (EAN-13) (Строка 13)/##CHR(13)##//##CHR(10)##/ + ";" //65. Проверка соответствия товара штрихкоду маркировки (Целое). 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ + mffdcode; //66. Мера количества предмета расчета (Целое)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТоваров");/##CHR(13)##//##CHR(10)##/ИНДИКАТОР();/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("ОБЪЕКТЫ " + ОБЪЕКТЫ);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("ТОВАРЫВОБЪЕКТАХ " + ТОВАРЫВОБЪЕКТАХ);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодАкции = ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ КодСкидки = ALLTRIM( СписокАкцийРучныхСкидок.discount );/##CHR(13)##//##CHR(10)##/ КодМероприятия = КодАкции + RIGHT(КодСкидки, 8 - LEN(КодАкции) ) ;/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount, dsc.vtype/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодАкции = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ КодСкидки = ALLTRIM( СписокАкций.discount );/##CHR(13)##//##CHR(10)##/ КодМероприятия = КодАкции + RIGHT(КодСкидки, 8 - LEN(КодАкции) ) ;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ sprschem.discount AS discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON obj.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ СписокТиповСкидок = "";/##CHR(13)##//##CHR(10)##/ ТипЗначенияСкидки = СписокАкций.vtype;/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ СписокТиповСкидок += ЕСЛИ( !ПУСТО( СписокТиповСкидок ), CHR( 149 ), "" ) + ЕСЛИ( !ПУСТО( Строка ), ЕСЛИ( ТипЗначенияСкидки == 1 , "0", "1" ), ЕСЛИ( ТипЗначенияСкидки == 1, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВидСкидки = ЕСЛИ( !ПУСТО( Строка ), ЕСЛИ( ТипЗначенияСкидки == 1 , "0", "1" ), ЕСЛИ( ТипЗначенияСкидки == 1, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), ВидСкидки + ";" + Процент, /##CHR(13)##//##CHR(10)##/ Строка + ";" + СписокХар + ";" + Строка2 + ";;;" + СписокТиповСкидок + ";" + СписокТиповСкидок ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( wday_min <= wday_max )/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min OR day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем 20 секунд появления LoadResult.txt/##CHR(13)##//##CHR(10)##///Время = TickCount( );/##CHR(13)##//##CHR(10)##///WHILE ( !ФАЙЛ( ФайлОтветаФронтол ) && TickCount( ) - Время < 20000 ) Ожидание( 1000 );/##CHR(13)##//##CHR(10)##///IF ( ФАЙЛ( ФайлОтветаФронтол ) )/##CHR(13)##//##CHR(10)##/// ВЫПОЛНИТЬ( "notepad", ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'PUBLIC ИСТОЧНИКДАТЫ, ДЕЛИТЬПОККМ, ДЕЛИТЬПОКС, СКЛАДЫИЗГРУПП, ФИРМЫИЗГРУПП, СПИСОКФР, ККМ_КОДОБОРУДОВАНИЯ,/##CHR(13)##//##CHR(10)##/КОДФРОНТ2, КОДФРОНТ3, КОДФРОНТ4, КОДФРОНТ5, КОДФРОНТ6;/##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАГРУЖАТЬЧЕКИ = ПЕРЕМЕННАЯ("_ФРОНТОЛ_ЗАГРУЖАТЬЧЕКИ", false);/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЖАТЬЧЕКИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ККМ_КОДОБОРУДОВАНИЯ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ IF ( !EQUIPMENT.ККМ_ЗагрузитьТранзакцииВЧеки( ККМ_КОДОБОРУДОВАНИЯ, ИмяФайла, sklad ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Произошла ошибка при загрузке чеков из Фронтол", "Загрузка чеков из Фронтол");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //загружаем ДКС из чеков/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТЫИЗЧЕКОВ", false ) AND !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ RETURN Сервис.РМКСоздатьДокументы( "", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТПРИАВТОМАТИЧЕСКОЙЗАГРУЗКЕ", true ) AND АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Индикатор( );/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА = ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ТИПДОКУМЕНТАТОЛЬКОПОФОРМЕОБМЕНА", false );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ """ + ИМЯОБОРУДОВАНИЯ + """. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФАЙЛОТКРЫТЬ( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/КодКассы = КодОборудования;/##CHR(13)##//##CHR(10)##/РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52" ) == "L" )/##CHR(13)##//##CHR(10)##/ РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = _РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем символ @ в первую строку - признак того, что файл загружен/##CHR(13)##//##CHR(10)##/ЕстьПризнакЧтения = ФайлПрочитать( fileHandle, "S" ) == "#";/##CHR(13)##//##CHR(10)##/IF ( ЕстьПризнакЧтения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( fileHandle, 0, 0 );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП = ЗАПРОС( "SELECT f_sklfromwaregrp FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/БРАТЬСКЛАДЫИЗГРУПП = СКЛАДЫИЗГРУПП OR ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///установим указатель на начало файла/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( fileHandle, 0, 0 ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Первые три строки - заголовок файла, он нам не интересен. В этих строках нет разделителей, поэтому будем пропускать по отсутствию точки с запятой/##CHR(13)##//##CHR(10)##/ IF ( ATC( string, ";", 1 ) == 0 OR ALLTRIM( string ) == "@" OR ALLTRIM( string ) == "#" )/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( VAL( GetWord( string, ";", ";", 6 ) ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ sgtin = ALLTRIM( STRTRAN( GetWord( string, ";", 33 ), CHR(164), ";" ) );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcodereg = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, barcodereg );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = ЕСЛИ( !ПУСТО( VAL( GetWord( string, ";", 22 ) ) ), 1, 0 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, /##CHR(13)##//##CHR(10)##/ 37, 38, 40, 41, 42, 43, 44, 45, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34, 80, 27 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( СЖАТЬПРОБЕЛЫ( СТРОКА( ЧИСЛО( warecode ) ) ) <> СЖАТЬПРОБЕЛЫ( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодКассы = ЗАПРОС( "SELECT code FROM sprequipment WHERE ex_code = ''" + POSNumber + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодКассы ) )/##CHR(13)##//##CHR(10)##/ kkmsklad = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code = ''" + КодКассы + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //IF ( chequeType <> "0" ) docid ++;/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrNumber = " + STR( VAL( ecrNumber ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ЗНАК( СуммаЧека ) != ЗНАК( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ SummWD = СТРОКА( -VAL( SummWD ), 16, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ "ecrNumber = " + STR( VAL( ecrNumber ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ("_ФРОНТОЛ_ДЕЛИТЬСТРОКИДКСПОВИДАМОПЛАТЫ", false ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ //IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "30" OR tranzType == "31" ) AND chequeType != "18" AND chequeType != "25" )/##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" OR tranzType == "30" OR tranzType == "31" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ docCodePredefined = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( !ПУСТО( docCodePredefined ), docCodePredefined, /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //инвентаризация/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ2 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ2, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "007"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //приходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ3 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ3, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "001";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ4 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ4, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "002";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //списание, оприходование/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ5 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ5, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "003";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //внутреннее перемещение/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ6 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ6, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "019";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не определили по кодам документов, то ставим тип "ДКС"/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docCode ) )/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем строки из документа, отличного от ДКС, то разделим их по номерам документов/##CHR(13)##//##CHR(10)##/ IF ( docCode <> "008" )/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ store_period = 0;/##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !БРАТЬСКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ // Если был прочитан ШК, то ищем ЕД для этого ШК и пересчитываем количество/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) AND !ПУСТО( barcodereg ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ed, koef, koef_c FROM sprres_ed WHERE code = ''" + nn + "'' AND barcode = ''" + STDF( barcodereg ) + "''", "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "ЕдиницаИнфо" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ed = ЕдиницаИнфо.ed;/##CHR(13)##//##CHR(10)##/ cena = cena * ЕдиницаИнфо.koef_c;/##CHR(13)##//##CHR(10)##/ kolp = kolp / ЕСЛИ( ЕдиницаИнфо.koef == 0, 1, ЕдиницаИнфо.koef );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !БРАТЬСКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем постановку на кран, то необходимо сформировать документ для отправки в ЧЗ/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КомментарийПостановки = "Касса """ + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + """ | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzCount ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzDate ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzTime ) + " | " + /##CHR(13)##//##CHR(10)##/ "док. № " + ALLTRIM( chequeNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( store_period ) )/##CHR(13)##//##CHR(10)##/ expirationDate = ДОБАВИТЬДНИ( CTOD( tranzDate + " " + tranzTime ), store_period );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ expirationDate = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ __SQL()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF NOT EXISTS( SELECT TOP 1 * FROM mark_reciept_spec spec/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_reciept mark ON mark.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ WHERE CONVERT( varchar(150), spec.mark ) = ''[[ STDF( sgtin ) ]]'' AND mark.action = ''TAP'' AND mark.note = ''[[ КомментарийПостановки ]]'' ) /##CHR(13)##//##CHR(10)##/ BEGIN/##CHR(13)##//##CHR(10)##/ EXEC sp_rmk_markdoc ''[[ firm ]]'', ''[[ nn ]]'', ''[[ КомментарийПостановки ]]'', ''[[ STDF( sgtin ) ]]'', [[ kolp ]], ''[[ expirationDate ]]'', ''beer''/##CHR(13)##//##CHR(10)##/ END /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SQLERROR/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при записи документа ""Постановка на кран"" с номером " + /##CHR(13)##//##CHR(10)##/ chequeNumber + " от " + tranzDate + " " + tranzTime + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + _ERRORDESCRIPTION, "Загрузка Постановки на кран" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( docCode == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем операцию постановки на кран (27) или снятия с крана (28), то пропускаем их загрузку в таблицу/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( chequeType ), 27, 28 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1, equipment )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + ", ''" + КодКассы + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ, ALLTRIM( STRTRAN( VAL( STR( koef, 7, 4 ) ), ",", ALLTRIM( delimiter ) ) ), "1" ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, egais.alcocode,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprnn.nnvid ) AS alcotype/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, СписокАлкокодов.maincode + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка спец цен из переоценки/##CHR(13)##//##CHR(10)##/ // Выводим все переоценки, для которых еще не закончилась акция/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM spr005 /##CHR(13)##//##CHR(10)##/ WHERE DATEDIFF( day, endaction, GETDATE( ) ) <= 0 AND EXISTS( SELECT * FROM reg008 WHERE code =''005'' AND ic = spr005.identity_column ) /##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "Переоценка" );/##CHR(13)##//##CHR(10)##/ // Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Переоценка" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КОДАКЦИИ = STR( 1000000000 + Переоценка.identity_column );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode AS subcode, sprnn.nngroup, sprnn.d_code AS aspect, spec.cena, sprnn.f_subres, sprnn_main.maincode AS code /##CHR(13)##//##CHR(10)##/ FROM spec005 spec /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprnn sprnn_main ON sprnn.subcode = sprnn_main.nn /##CHR(13)##//##CHR(10)##/ WHERE spec.cena > 0 AND spec.ic = " + Переоценка.identity_column, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + DTOC( Переоценка.date ) + ";" + DTOC( Переоценка.endaction ) + ";;;СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;1;0;1;1;1" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем список товаров и разрезов/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_subres AND !ПУСТО( СписокТоваров.code ) AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( ЕСЛИ( СписокТоваров.f_subres, СписокТоваров.subcode, СписокТоваров.code ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + STR( СписокТоваров.cena, 16, 2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + КОДАКЦИИ +";СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;8;" + Строка + ";" + СписокХар + ";" + Строка2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Переоценка" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, clev, name FROM sprccnames WHERE clev <> (SELECT clev FROM sprskl WHERE code = ( SELECT sklad FROM sprequipment where code = ''" + КОДОБОРУДОВАНИЯ + "'' ) )", "СписокПрайсЛистов");/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокПрайсЛистов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPRICELISTS" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокПрайсЛистов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + LEFT(СписокПрайсЛистов.name, 100) + ";" + LEFT(СписокПрайсЛистов.name, 100);/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО("СписокПрайсЛистов");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СписокПрайсЛистов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, dbo.fn_calcclev_cena(nn, GETDATE(),''" + СписокПрайсЛистов.clev + "'', ''001'') AS cena FROM "+ ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!СОХРАНЯТЬТОВАРЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEPRICELISTPRICES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + СписокТоваров.code + ";;;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPRICELISTPRICES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( СписокТоваров.cena ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + СписокТоваров.code + ";;;;;;" + СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ ) //OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 6','ККМ',0.00000000,'Профиль обмена с программным обеспечением Frontol 6.19.2 и выше. Совместим с Айтида, начиная с версии 4.5.0',0.00000000,7401.00000000,0,'',0.00000000,'','',0,'7490CF3F-F966-4851-8939-834B20D89A63',0,1,0,'22.02.2024 14:44:21') #begin #description Обмен данными с Фронтол 6 (вскрытие тары) #name Обмен данными с Фронтол 6 (вскрытие тары) #code 0000000156 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( path_out );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("ОШИБКА: " + _ERRORCODE + CHR(13) + "ОПИСАНИЕ: " + _ERRORDESCRIPTION);/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT COUNT(*) FROM " + ТОВАРЫ ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СООБЩЕНИЕ( "Вы уверены, что хотите очистить список товаров во Фронтол?", "Выгрузка товаров", 36 ) == 6 )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ // если Признак загрузки остатков равен "перезаписывать"/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //если установлен признак очистки, то передадим команды удаления всех налоговых групп и ставок/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //удалить все налоговые ставки/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXRATES" );/##CHR(13)##//##CHR(10)##/ //удалить все налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ //удалить все налоговые ставки группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //после того как загрузили налоги, нужно передать 2 настройки для налогов поумолчанию,/##CHR(13)##//##CHR(10)##/ //т.к. после очистки налогов в ККМ эти настройки сбрасываются/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //выбираем первую ставку из налоговых ставок, с наименьшим кодом и налоговой ставкой/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT TOP 1 code, list/##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = (SELECT TOP 1 code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_, code) /##CHR(13)##//##CHR(10)##/ AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СписокНалогов");/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокНалогов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDSETTINGS" );/##CHR(13)##//##CHR(10)##/ //Код налоговой группы по умолчанию для регистрации по свободной цене/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "TaxGroupDefaultFreeID" + ";" + STR( VAL( СписокНалогов.code ) ) );/##CHR(13)##//##CHR(10)##/ //Код налоговой группы по умолчанию для регистрации по коду/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "TaxGroupDefaultCodeID" + ";" + STR( VAL( СписокНалогов.code ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник групп сертификатов/##CHR(13)##//##CHR(10)##/// Он должен идти первым, т.к. далее могут быть на него ссылки/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ГруппаСертификатовВводСертифик, ГруппаСертификатовСуммаКРасчет FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол группа сертификатов''" ), "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDGROUPS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ГруппыСертификатов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";"+ /##CHR(13)##//##CHR(10)##/VAL( ГруппаСертификатовВводСертифик ) + ";" + VAL( ГруппаСертификатовСуммаКРасчет ) + ";0");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ГруппыСертификатов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник видов оплат/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, ВидОплатРазрешенаСдача, ВидОплатТипОплаты, /##CHR(13)##//##CHR(10)##/ ВидОплатИзменяетДенежныйЯщик, ВидОплатОперация, ВидОплатКодПлатежнойСистемы, /##CHR(13)##//##CHR(10)##/ ВидОплатКодГруппыСертификатов, ВидОплатКодГруппыПечати FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол виды оплат''" ), "ВидыОплат" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPAYMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ВидыОплат" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ) + ";" + VAL( ВидОплатРазрешенаСдача ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатТипОплаты + ";" + VAL( ВидОплатИзменяетДенежныйЯщик ) + ";" + STR( VAL( ВидОплатОперация ) - 1 ) + ";"+/##CHR(13)##//##CHR(10)##/ ВидОплатКодПлатежнойСистемы + ";" + VAL( ВидОплатКодГруппыСертификатов ) + ";" + ВидОплатКодГруппыПечати );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ВидыОплат" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник сертификатов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст, СертификатКодГруппыСертификато, СертификатНачалоДиапазонаДлин,/##CHR(13)##//##CHR(10)##/ СертификатКонецДиапазонаДлин, СертификатНачалоДиапазонаПрефи, СертификатКонецДиапазонаПрефик,/##CHR(13)##//##CHR(10)##/ СертификатДатаНачалаДействия, СертификатДатаОкончанияДействи, СертификатНоминал, СертификатСостояние FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол сертификаты''" ), "Сертификаты" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCARDS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Сертификаты" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СертификатКодГруппыСертификато + ";" + code + ";" + STDE( name ) + ";;"+ /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатНачалоДиапазонаДлин != 0, СертификатНачалоДиапазонаДлин, "") + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СертификатКонецДиапазонаДлин != 0, СертификатКонецДиапазонаДлин, "" )+ ";" + /##CHR(13)##//##CHR(10)##/ STDE( СертификатНачалоДиапазонаПрефи ) + ";" + STDE( СертификатКонецДиапазонаПрефик ) + ";" +/##CHR(13)##//##CHR(10)##/ DTOC( СертификатДатаНачалаДействия ) + ";" + DTOC( СертификатДатаОкончанияДействи ) + ";0;" + /##CHR(13)##//##CHR(10)##/ СертификатНоминал + ";" + VAL( СертификатСостояние ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Сертификаты" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник комментариев/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, ФронтолТекст FROM "+/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "SELECT header FROM sprtabs WHERE name= ''Фронтол комментарии''" ), "Комментарии" );/##CHR(13)##//##CHR(10)##/Выбратьконтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCOMMENTS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "Комментарии" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( ФронтолТекст ));/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "Комментарии" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //очистка реквизитов агента при установке флага очистки ККМ перед загрузкой/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, inn, legal_adress, telefon, agent_type, agent_oper, agent_telephone_pa, agent_name_op, agent_inn_op, agent_address_op, agent_telephone_op, agent_telephone_pp/##CHR(13)##//##CHR(10)##/ FROM sprclient /##CHR(13)##//##CHR(10)##/ WHERE code IN (SELECT sprres.vendor FROM sprres sprres/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code AND sprres.f_agentware = 1 )","ПоставщикиАгенты");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("ПоставщикиАгенты") > 0)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "ПоставщикиАгенты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем строку реквизитов, только обязательными для конкретного типа агента реквизитами для того чтобы правильно формировались тэги в чеке/##CHR(13)##//##CHR(10)##/ IF ( VAL(ПоставщикиАгенты.agent_type) == 0 OR VAL(ПоставщикиАгенты.agent_type) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";;;;;" + LEFT( ПоставщикиАгенты.agent_telephone_pp , 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 2 OR VAL(ПоставщикиАгенты.agent_type) == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( ПоставщикиАгенты.agent_oper ), 24 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";" + LEFT ( ПоставщикиАгенты.agent_name_op, 64 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT ( ПоставщикиАгенты.agent_inn_op, 10) + ";" + LEFT( ПоставщикиАгенты.agent_address_op , 256 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_op , 100 ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 4 OR VAL(ПоставщикиАгенты.agent_type) == 5 OR VAL(ПоставщикиАгенты.agent_type) == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;;;;;;;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СтрокаПоставщика))/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СтрокаПоставщика );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ПоставщикиАгенты" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка модификаторов и групп модификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= 0", "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";;1;" + STDE( name ) + ";" + STDE( name ) + /##CHR(13)##//##CHR(10)##/ ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь второй уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier/##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектации.identity_column, "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень2" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектации.code ) + 1000000000 ) ) + ";1;" + STDE( name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь третий уровень групп/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code, name, identity_column, f_singleModifier, f_repeateModifier /##CHR(13)##//##CHR(10)##/ FROM sprnnlink_groups/##CHR(13)##//##CHR(10)##/ WHERE nn = '''' AND parent= " + СписокГруппКомплектацииУровень2.identity_column, "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокГруппКомплектацииУровень3" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( СписокГруппКомплектацииУровень2.code ) + 1000000000 ) ) + ";1;" + /##CHR(13)##//##CHR(10)##/ STDE( name ) + ";" + STDE( name ) + ";;;" + ЕСЛИ( f_singleModifier, "1", "0" ) + ";" + ЕСЛИ( f_repeateModifier, "1", "0" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень3" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектацииУровень2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокГруппКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь саму комплектацию/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_, nnlinks.kolp_1, sprres.name, nnlinks.identity_column/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn_r = sprres.code /##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( identity_column ) ) + ";" + ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";0;" + STDE( name ) + ";" + STDE( name ) + ";"+/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( VAL( maincode ) ) ) + ";" + ALLTRIM( STR( kolp_1, 10, 3 ) ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь связи групп и товаров/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMODIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT sprres.maincode, nnlinks.group_/##CHR(13)##//##CHR(10)##/ FROM sprnnlinks nnlinks/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres sprres ON nnlinks.nn = sprres.code /##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code/##CHR(13)##//##CHR(10)##/ WHERE nnlinks.nn_r = '''' AND nnlinks.group_ <> ''''", "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКомплектации" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( group_ ) + 1000000000 ) ) + ";" + ALLTRIM( STR( VAL( maincode ) ) );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокКомплектации" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если производим выгрузку из плана-меню, то формируем строки для меню/##CHR(13)##//##CHR(10)##/ IF ( КОДДОКУМЕНТА == "054" OR ЕСЛИ( !ПУСТО( СПИСОКДОКУМЕНТОВ ), ЗАПРОС( "SELECT code FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''" ) == "054", false ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 1 ] = "Понедельник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 2 ] = "Вторник";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 3 ] = "Среда";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 4 ] = "Четверг";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 5 ] = "Пятница";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 6 ] = "Суббота";/##CHR(13)##//##CHR(10)##/ ДНИНЕДЕЛИ[ 7 ] = "Воскресенье";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Добавляем команду удаления меню из Фронтол/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СПИСОКДОКУМЕНТОВ ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLMENUS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ic FROM " + СПИСОКДОКУМЕНТОВ + " WHERE code = ''054''", "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT " + ИДДОКУМЕНТА + " AS ic", "СписокДокументов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE( !КОНЕЦКОНТЕКСТА( "СписокДокументов" ) ) /##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИДДОКУМЕНТА = СписокДокументов.ic;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT spr.date, sprnn.maincode /##CHR(13)##//##CHR(10)##/ FROM spr054 spr/##CHR(13)##//##CHR(10)##/ INNER JOIN spec054 spec ON spec.ic = spr.identity_column/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE spr.identity_column= " + ИДДОКУМЕНТА, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ НОМЕРДНЯ = ДЕНЬНЕДЕЛИ( ПланМеню.date );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";Меню на " + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENUPERIODS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ДНИНЕДЕЛИ[ НОМЕРДНЯ ] + ";;;;;;" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 1, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 2, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 3, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 4, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 5, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 6, "1", "0" ) + "," + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( НОМЕРДНЯ == 7, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMENULINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "ПланМеню" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( НОМЕРДНЯ ) + ";1;" + ПланМеню.maincode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "ПланМеню" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ПланМеню" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокДокументов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } // Окончание выгрузки из Плана меню/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Если надо, то выгружаем алкокоды/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nnvid, sprnn.ed, egais.alcocode,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprnn.nnvid ) AS alcotype/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ // Если продукция разливная, то алкокод связываем со второй карточкой, которая для вскрытия тары/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокАлкокодов.alcotype ) == 1 AND !ВСПИСКЕ( СписокАлкокодов.nnvid, "481" );/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокАлкокодов.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ЕСЛИ( РазливнойАлко, STR( VAL( СписокАлкокодов.maincode ) + 90000000 ), СписокАлкокодов.maincode ) + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка спец цен из переоценки/##CHR(13)##//##CHR(10)##/ // Выводим все переоценки, для которых еще не закончилась акция/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM spr005 /##CHR(13)##//##CHR(10)##/ WHERE DATEDIFF( day, endaction, GETDATE( ) ) <= 0 AND EXISTS( SELECT * FROM reg008 WHERE code =''005'' AND ic = spr005.identity_column ) /##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "Переоценка" );/##CHR(13)##//##CHR(10)##/ // Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "Переоценка" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КОДАКЦИИ = STR( 1000000000 + Переоценка.identity_column );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode AS subcode, sprnn.nngroup, sprnn.d_code AS aspect, spec.cena, sprnn.f_subres, sprnn_main.maincode AS code /##CHR(13)##//##CHR(10)##/ FROM spec005 spec /##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON spec.nn = sprnn.nn/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprnn sprnn_main ON sprnn.subcode = sprnn_main.nn /##CHR(13)##//##CHR(10)##/ WHERE spec.cena > 0 AND spec.ic = " + Переоценка.identity_column, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоваров" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + DTOC( Переоценка.date ) + ";" + DTOC( Переоценка.endaction ) + ";;;СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;1;0;1;1;1" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем список товаров и разрезов/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.f_subres AND !ПУСТО( СписокТоваров.code ) AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( ЕСЛИ( СписокТоваров.f_subres, СписокТоваров.subcode, СписокТоваров.code ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + STR( СписокТоваров.cena, 16, 2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КОДАКЦИИ + ";" + КОДАКЦИИ +";СПЕЦЦЕНЫ;СПЕЦЦЕНЫ;8;" + Строка + ";" + СписокХар + ";" + Строка2 );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "Переоценка" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "Переоценка" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //Выгрузка групп ресурсов как классификаторов товаров в ККМ./##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Сначала группы ресурсов/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name /##CHR(13)##//##CHR(10)##/ FROM sprres_g /##CHR(13)##//##CHR(10)##/ WHERE folder=0 and notavail=0 and f_nokkm=0", "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокГруппРесурсов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( code ))) + ";;0;" + STDE( name ) + ";" + STDE( name );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокГруппРесурсов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь связи групп ресурсов и товаров/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT t.code, t.nngroup, t.f_subres/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t/##CHR(13)##//##CHR(10)##/ WHERE t.f_subres = 0 AND t.nngroup <> '''' AND t.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( nngroup ))) + ";1;" + ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, clev, name FROM sprccnames WHERE clev <> (SELECT clev FROM sprskl WHERE code = ( SELECT sklad FROM sprequipment where code = ''" + КОДОБОРУДОВАНИЯ + "'' ) )", "СписокПрайсЛистов");/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокПрайсЛистов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPRICELISTS" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокПрайсЛистов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + LEFT(СписокПрайсЛистов.name, 100) + ";" + LEFT(СписокПрайсЛистов.name, 100);/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО("СписокПрайсЛистов");/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА("СписокПрайсЛистов") )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, dbo.fn_calcclev_cena(nn, GETDATE(),''" + СписокПрайсЛистов.clev + "'', ''001'') AS cena FROM "+ ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!СОХРАНЯТЬТОВАРЫ)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEPRICELISTPRICES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + СписокТоваров.code + ";;;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDPRICELISTPRICES" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ПЕРЕЙТИВНАЧАЛО( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( СписокТоваров.cena ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка = STR(VAL(СписокПрайсЛистов.code)) + ";" + СписокТоваров.code + ";;;;;;" + СписокТоваров.cena;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ SKIP( 1, "СписокПрайсЛистов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФАЙЛЗАКРЫТЬ( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/ mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCardn = STRTRAN( cardn, ";", CHR( 164 ) ); /##CHR(13)##//##CHR(10)##/ mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/ mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/ mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если есть объекты скидок с картами, то формируем классификаторы карт/##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, temp.discount, CASE WHEN temp.card <> '''' THEN sprschem.code ELSE '''' END AS classcode, sprschem.name/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлассификаторов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКлассификаторов.classcode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) ) + ";;0;" + STDE( СписокКлассификаторов.name ) + ";" + STDE( СписокКлассификаторов.name ) );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT spr.cardn/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmcard spr ON spr.code = temp.card/##CHR(13)##//##CHR(10)##/ WHERE temp.schem = ''" + СписокКлассификаторов.code + "''", "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDCLASSIFIERLINKS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокКартСхемы" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокКартСхемы.cardn ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокКлассификаторов.code ) ) )+ ";3;" + STDE( СписокКартСхемы.cardn ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКартСхемы" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокКлассификаторов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'//Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );--DISTINCT /##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT barcode, code, koef, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' GROUP BY barcode, code, koef, aspectlist ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ, ALLTRIM( STRTRAN( VAL( STR( koef, 7, 4 ) ), ",", ALLTRIM( delimiter ) ) ), "1" ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// Значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///ФайлОтветаФронтол = ЛЕВСИМВ( path_out, RAT( path_out, "\" ) ) + "LoadResult.txt";/##CHR(13)##//##CHR(10)##///ФАЙЛУДАЛИТЬ( ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 = true;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬСПЕЦЦЕНЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКЛАССИФИКАТОРЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬПРАЙСЛИСТЫ_ФРОНТОЛ52 = false; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Дисконтные карты/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИКАРТ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCCARDDISCS" );/##CHR(13)##//##CHR(10)##/// Клиенты, владельцы дисконтных карт/##CHR(13)##//##CHR(10)##///IF ( ПРИЗНАКОЧИСТКИКЛИЕНТОВ ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/// Так как все загружается через маркетинговые акции, то предварительно их удаляем/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ OR ПРИЗНАКОЧИСТКИСТАВОК OR ПРИЗНАКОЧИСТКИОБЪЕКТОВ ) //OR ТИПВЫГРУЗКИ == "СКИДКИ" ) /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/ mZdate = "";/##CHR(13)##//##CHR(10)##/ mIndex = "";/##CHR(13)##//##CHR(10)##/ mCity = "";/##CHR(13)##//##CHR(10)##/ mWeb = "";/##CHR(13)##//##CHR(10)##/ mInn = "";/##CHR(13)##//##CHR(10)##/ mDoc = "";/##CHR(13)##//##CHR(10)##/ mOkpo = "";/##CHR(13)##//##CHR(10)##/ mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/ mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/ mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/ mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/ mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/ mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/ mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/ mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode, crd.card_type/##CHR(13)##//##CHR(10)##/ FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/ INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/ mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/ Строка = mClientCode + ";" + mParent + ";" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("ОБЪЕКТЫ " + ОБЪЕКТЫ);/##CHR(13)##//##CHR(10)##/СООБЩЕНИЕ("ТОВАРЫВОБЪЕКТАХ " + ТОВАРЫВОБЪЕКТАХ);/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##/// Правило объединения - максимальная скидка/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$CHANGEMARKETINGACTIONSUNION" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "2;2" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Выгрузка объектов скидок в ККМ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Сначала выгружаем ручные скидки/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount,/##CHR(13)##//##CHR(10)##/ dsc.type_, dsc.vtype, dsc.f_evaluate, dsc.value, dsc.value_min, dsc.value_max/##CHR(13)##//##CHR(10)##/ FROM sprmdiscount_schem sprschem /##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code and dsc.f_auto = 0", "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + DTOC( СписокАкцийРучныхСкидок.start_date ) + ";" + /##CHR(13)##//##CHR(10)##/ DTOC( СписокАкцийРучныхСкидок.end_date ) + ";;;" + STDE( СписокАкцийРучныхСкидок.name ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь формируем события по акциям/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкцийРучныхСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодАкции = ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ КодСкидки = ALLTRIM( СписокАкцийРучныхСкидок.discount );/##CHR(13)##//##CHR(10)##/ КодМероприятия = КодАкции + RIGHT(КодСкидки, 8 - LEN(КодАкции) ) ;/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( СписокАкцийРучныхСкидок.value_min ) AND ПУСТО( СписокАкцийРучныхСкидок.value_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокАкцийРучныхСкидок.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокАкцийРучныхСкидок.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";0;" + Процент );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Процент_min = STR( VAL( СписокАкцийРучныхСкидок.value_min ), 10, 2 );/##CHR(13)##//##CHR(10)##/ Процент_max = STR( VAL( СписокАкцийРучныхСкидок.value_max ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкцийРучныхСкидок.code ) + 5 ) ) + ";" + /##CHR(13)##//##CHR(10)##/ STDE( СписокАкцийРучныхСкидок.name ) + ";" + STDE( СписокАкцийРучныхСкидок.ctext ) + ";5;" + /##CHR(13)##//##CHR(10)##/ STR( СписокАкцийРучныхСкидок.type_ - 1 ) + ";" + ЕСЛИ( СписокАкцийРучныхСкидок.vtype == 1, "1", "0" ) + ";1;0;" + /##CHR(13)##//##CHR(10)##/ Процент_min + ";" + Процент_max );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СписокАкцийРучныхСкидок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount, dsc.vtype/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;;1;2" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ КодАкции = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ КодСкидки = ALLTRIM( СписокАкций.discount );/##CHR(13)##//##CHR(10)##/ КодМероприятия = КодАкции + RIGHT(КодСкидки, 8 - LEN(КодАкции) ) ;/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.f_subres, obj.ware_folder, obj.warefolder_ic, obj.maincode, /##CHR(13)##//##CHR(10)##/ sprschem.discount AS discount, obj.aspect, ware.group_, obj.value, obj.f_evaluate, obj.subcode/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON obj.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.nn <> '''' OR obj.ware_folder = 1 )", "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.card, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND obj.card <> ''''", "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT DISTINCT obj.client, obj.client_folder, obj.clientfolder_ic, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "'' AND ( obj.client <> '''' OR client_folder = 1 )", "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) == 0 AND КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ // Если нет "товарных" объектов в выбранной схеме, то пропускаем такую схему/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ УсловиеКарт = "";/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов = "";/##CHR(13)##//##CHR(10)##/ СписокХар = "";/##CHR(13)##//##CHR(10)##/ Процент = "";/##CHR(13)##//##CHR(10)##/ СписокТиповСкидок = "";/##CHR(13)##//##CHR(10)##/ ТипЗначенияСкидки = СписокАкций.vtype;/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокТоварныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоварныхОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокТоварныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( СписокТоварныхОбъектов.ware_folder OR !ПУСТО( СписокТоварныхОбъектов.maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAspectList = "";/##CHR(13)##//##CHR(10)##/ /////////////////////////////////////////////////////////////////////////////////##CHR(13)##//##CHR(10)##/ // Для разреза товара необходимо сформировать список используемых разрезов/##CHR(13)##//##CHR(10)##/ // Формируем список разрезов через запятую/##CHR(13)##//##CHR(10)##/ IF ( !ware_folder AND f_subres AND f_razr AND ( aspecttype == 2 OR aspecttype == 0 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоварныхОбъектов.group_ + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ mAspectValue= ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоварныхОбъектов.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ mAspectList = mAspectList + IIF( !EMPTY( mAspectList ), "#", "" ) + mAspectValue;/##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ КодГлавной = ЗАПРОС( "SELECT maincode FROM sprres WHERE code= ''" + СписокТоварныхОбъектов.subcode + "''" );/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + mAspectList;/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ALLTRIM( КодГлавной );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокХар += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" );/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + ЕСЛИ( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ СписокТиповСкидок += ЕСЛИ( !ПУСТО( СписокТиповСкидок ), CHR( 149 ), "" ) + ЕСЛИ( !ПУСТО( Строка ), ЕСЛИ( ТипЗначенияСкидки == 1 , "0", "1" ), ЕСЛИ( ТипЗначенияСкидки == 1, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокТоварныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКарточныхОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКарт = ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКарточныхОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКарточныхОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "СписокКлиентскихОбъектов" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если процент скидки еще не был вычислен, то вычисляем его здесь/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( Процент ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокКлиентскихОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокКлиентскихОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокКлиентскихОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ УсловиеКлиентов += ЕСЛИ( !ПУСТО( УсловиеКлиентов ), CHR( 149 ), "" ) + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокКлиентскихОбъектов.client_folder, ALLTRIM( STR( 1000000000 + СписокКлиентскихОбъектов.clientfolder_ic ) ), /##CHR(13)##//##CHR(10)##/ ALLTRIM( СписокКлиентскихОбъектов.client ) );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКлиентскихОбъектов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокКарточныхОбъектов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВидСкидки = ЕСЛИ( !ПУСТО( Строка ), ЕСЛИ( ТипЗначенияСкидки == 1 , "0", "1" ), ЕСЛИ( ТипЗначенияСкидки == 1, "1", "0" ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";" + ALLTRIM( STR( VAL( СписокАкций.code ) + 5 ) ) + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО( Строка ), "2", "1" ) + ";" + ЕСЛИ( ПУСТО( Строка ), ВидСкидки + ";" + Процент, /##CHR(13)##//##CHR(10)##/ Строка + ";" + СписокХар + ";" + Строка2 + ";;;" + СписокТиповСкидок + ";" + СписокТиповСкидок ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ // Если были объекты с картами. то добавляем условие на классификатор карт/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКарт ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";15;" + ALLTRIM( STR( VAL( СписокАкций.code ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( УсловиеКлиентов ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, КодМероприятия + ";18;" + УсловиеКлиентов );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";1;>=;" + ALLTRIM( STR( csumma_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";1;<=;" + ALLTRIM( STR( csumma_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";22;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";22;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";23;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";23;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";5;>=;" + ALLTRIM( prefix_min ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";5;<=;" + ALLTRIM( prefix_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( wday_min <= wday_max )/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min OR day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";13;0;1;" + STR( birthday_min ) + ";" + STR( birthday_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬ( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";" + //1. идентификатор/##CHR(13)##//##CHR(10)##/ ";" + //2. /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //3. наименование/##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //4. текст/##CHR(13)##//##CHR(10)##/ ";" + //5. /##CHR(13)##//##CHR(10)##/ ";" + //6. /##CHR(13)##//##CHR(10)##/ ";" + //7. не используется/##CHR(13)##//##CHR(10)##/ ";" + //8. /##CHR(13)##//##CHR(10)##/ "0.00" + ";" + //9. минимальная цена/##CHR(13)##//##CHR(10)##/ ";" + //10. /##CHR(13)##//##CHR(10)##/ "0" + ";" + //11. код схемы разрезов/##CHR(13)##//##CHR(10)##/ ";" + //12. /##CHR(13)##//##CHR(10)##/ ";" + //13. /##CHR(13)##//##CHR(10)##/ ";" + //14. /##CHR(13)##//##CHR(10)##/ ";" + //15. не используется/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) + ";" + //16.код родительской группы/##CHR(13)##//##CHR(10)##/ "0" + ";" + //17. товар или группа. "0" для группы/##CHR(13)##//##CHR(10)##/ ";" + //18. /##CHR(13)##//##CHR(10)##/ ";" + //19. /##CHR(13)##//##CHR(10)##/ ";" + //20. /##CHR(13)##//##CHR(10)##/ ";" + //21. /##CHR(13)##//##CHR(10)##/ ";" + //22. /##CHR(13)##//##CHR(10)##/ ";" + //23. код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. /##CHR(13)##//##CHR(10)##/ ";" + //25. /##CHR(13)##//##CHR(10)##/ ";" + //26. артикул/##CHR(13)##//##CHR(10)##/ ";" + //27. тип скидки/##CHR(13)##//##CHR(10)##/ ";" + //28. значение скидки/##CHR(13)##//##CHR(10)##/ ";" + //29. максимальная скидка/##CHR(13)##//##CHR(10)##/ ";" + //30. /##CHR(13)##//##CHR(10)##/ ";" + //31. файл с картинкой/##CHR(13)##//##CHR(10)##/ ";" + //32. описание/##CHR(13)##//##CHR(10)##/ ";" + //33. /##CHR(13)##//##CHR(10)##/ ";" + //34. /##CHR(13)##//##CHR(10)##/ ";" + //35. /##CHR(13)##//##CHR(10)##/ ";" + //36. /##CHR(13)##//##CHR(10)##/ ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ ";" + //39. код группы печати чека/##CHR(13)##//##CHR(10)##/ ";" + //40. код группы печати копии/##CHR(13)##//##CHR(10)##/ ";" + //41. код группы печати счета/##CHR(13)##//##CHR(10)##/ ";" + //42. код группы печати марки/##CHR(13)##//##CHR(10)##/ ";"; //43. код предприятия/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, chequetext, profile, password, ex_code, /##CHR(13)##//##CHR(10)##/ ( SELECT MAX( inn ) FROM sprempl WHERE maincode = temp.code ) AS inn /##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp", "СправочникПользователей" ); /##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + STDE( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" + STDE( inn ) );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьПризнакЗагрузки = ЕСЛИ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ, f_checkdone, ЗАПРОС("SELECT f_checkdone_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроверятьПризнакЗагрузки )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'PUBLIC ИСТОЧНИКДАТЫ, ДЕЛИТЬПОККМ, ДЕЛИТЬПОКС, СКЛАДЫИЗГРУПП, ФИРМЫИЗГРУПП, СПИСОКФР, ККМ_КОДОБОРУДОВАНИЯ,/##CHR(13)##//##CHR(10)##/КОДФРОНТ2, КОДФРОНТ3, КОДФРОНТ4, КОДФРОНТ5, КОДФРОНТ6;/##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАГРУЖАТЬЧЕКИ = ПЕРЕМЕННАЯ("_ФРОНТОЛ_ЗАГРУЖАТЬЧЕКИ", false);/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЖАТЬЧЕКИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ККМ_КОДОБОРУДОВАНИЯ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ IF ( !EQUIPMENT.ККМ_ЗагрузитьТранзакцииВЧеки( ККМ_КОДОБОРУДОВАНИЯ, ИмяФайла, sklad ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Произошла ошибка при загрузке чеков из Фронтол", "Загрузка чеков из Фронтол");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //загружаем ДКС из чеков/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТЫИЗЧЕКОВ", false ) AND !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ RETURN Сервис.РМКСоздатьДокументы( "", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТПРИАВТОМАТИЧЕСКОЙЗАГРУЗКЕ", true ) AND АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Индикатор( );/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА = ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ТИПДОКУМЕНТАТОЛЬКОПОФОРМЕОБМЕНА", false );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ """ + ИМЯОБОРУДОВАНИЯ + """. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/sklad_d = "";/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##/docid = 0;/##CHR(13)##//##CHR(10)##/_ERRORDESCRIPTION = "";/##CHR(13)##//##CHR(10)##/КодКассы = КодОборудования;/##CHR(13)##//##CHR(10)##/РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52" ) == "L" )/##CHR(13)##//##CHR(10)##/ РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ = _РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ_ФРОНТОЛ52;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///записываем символ @ в первую строку - признак того, что файл загружен/##CHR(13)##//##CHR(10)##/ЕстьПризнакЧтения = ФайлПрочитать( fileHandle, "S" ) == "#";/##CHR(13)##//##CHR(10)##/IF ( ЕстьПризнакЧтения )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( fileHandle, 0, 0 );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП = ЗАПРОС( "SELECT f_sklfromwaregrp FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/БРАТЬСКЛАДЫИЗГРУПП = СКЛАДЫИЗГРУПП OR ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///установим указатель на начало файла/##CHR(13)##//##CHR(10)##/ФАЙЛУСТАНОВИТЬУКАЗАТЕЛЬ( fileHandle, 0, 0 ); /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Первые три строки - заголовок файла, он нам не интересен. В этих строках нет разделителей, поэтому будем пропускать по отсутствию точки с запятой/##CHR(13)##//##CHR(10)##/ IF ( ATC( string, ";", 1 ) == 0 OR ALLTRIM( string ) == "@" OR ALLTRIM( string ) == "#" )/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = STR( VAL( GetWord( string, ";", ";", 6 ) ) );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ sgtin = ALLTRIM( STRTRAN( GetWord( string, ";", 33 ), CHR(164), ";" ) );/##CHR(13)##//##CHR(10)##/ exmark = GetWord( string, ";", 34 );/##CHR(13)##//##CHR(10)##/ barcodereg = GetWord( string, ";", 19 );/##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, barcodereg );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = ЕСЛИ( !ПУСТО( VAL( GetWord( string, ";", 22 ) ) ), 1, 0 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 9, 10, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, /##CHR(13)##//##CHR(10)##/ 87, 78, 88, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 55, 56, 57, 49, 45, 82, 83, 84, 86, 87, 32, 33, 34, 80, 27 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запятой/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( СЖАТЬПРОБЕЛЫ( СТРОКА( ЧИСЛО( warecode ) ) ) <> СЖАТЬПРОБЕЛЫ( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectValue1 ) > 100000000 )/##CHR(13)##//##CHR(10)##/ AspectValue1= "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека, или другая, подразумевающая наличие клиента, то /##CHR(13)##//##CHR(10)##/ //------- если карта не была указана, пытаемся ее определить по клиенту/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( tranzType ), 55, 42, 56, 45, 49 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( РАБОЧИЕМЕСТАКАКОТДЕЛЬНЫЕККМ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КодКассы = ЗАПРОС( "SELECT code FROM sprequipment WHERE ex_code = ''" + POSNumber + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КодКассы ) )/##CHR(13)##//##CHR(10)##/ kkmsklad = ЗАПРОС( "SELECT sklad FROM sprequipment WHERE code = ''" + КодКассы + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ КоличествоМарок = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ //IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "49" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrNumber = " + STR( VAL( ecrNumber ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ЗНАК( СуммаЧека ) != ЗНАК( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ SummWD = СТРОКА( -VAL( SummWD ), 16, 2 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ "ecrNumber = " + STR( VAL( ecrNumber ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( AspectsList <> "1" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + ")");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ("_ФРОНТОЛ_ДЕЛИТЬСТРОКИДКСПОВИДАМОПЛАТЫ", false ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ // Для пропуска транзакций Вскрытие тары изменить строку на такую/##CHR(13)##//##CHR(10)##/ // IF ( ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" ) AND chequeType != "18" )/##CHR(13)##//##CHR(10)##/ //IF ( (tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12") AND chequeType != "25" )/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCodePredefined = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> "18", "008", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( !ПУСТО( docCodePredefined ), docCodePredefined, /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", "008" )))))))));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //инвентаризация/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ2 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ2, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "007"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //приходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ3 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ3, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "001";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ4 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ4, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "002";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //списание, оприходование/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ5 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ5, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "003";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //внутреннее перемещение/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ6 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ6, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "019";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не определили по кодам документов, то ставим тип "ДКС"/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docCode ) )/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем строки из документа, отличного от ДКС, то разделим их по номерам документов/##CHR(13)##//##CHR(10)##/ IF ( docCode <> "008" )/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999", /##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ sprres_gdlist.code = sprres.group_ AND/##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ store_period = 0;/##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ IF ( !ДОБАВИТЬКОНТЕКСТ( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокФР" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАКРЫТЬ( fileHandle );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Ошибка выполнение запроса ''" + _ERRORDESCRIPTION + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ЕСЛИ( docCode == "046", "шт", ТОВАРИНФО.ed );/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !БРАТЬСКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ // Если был прочитан ШК, то ищем ЕД для этого ШК и пересчитываем количество/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( nn ) AND !ПУСТО( barcodereg ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT ed, koef, koef_c FROM sprres_ed WHERE code = ''" + nn + "'' AND barcode = ''" + STDF( barcodereg ) + "''", "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ IF ( КОЛИЧЕСТВОСТРОК( "ЕдиницаИнфо" ) > 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ed = ЕдиницаИнфо.ed;/##CHR(13)##//##CHR(10)##/ cena = cena * ЕдиницаИнфо.koef_c;/##CHR(13)##//##CHR(10)##/ kolp = kolp / ЕСЛИ( ЕдиницаИнфо.koef == 0, 1, ЕдиницаИнфо.koef );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "ЕдиницаИнфо" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR !БРАТЬСКЛАДЫИЗГРУПП, kkmsklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем постановку на кран, то необходимо сформировать документ для отправки в ЧЗ/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ КомментарийПостановки = "Касса """ + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + """ | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzCount ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzDate ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzTime ) + " | " + /##CHR(13)##//##CHR(10)##/ "док. № " + ALLTRIM( chequeNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( store_period ) )/##CHR(13)##//##CHR(10)##/ expirationDate = ДОБАВИТЬДНИ( CTOD( tranzDate + " " + tranzTime ), store_period );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ expirationDate = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ __SQL()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF NOT EXISTS( SELECT TOP 1 * FROM mark_reciept_spec spec/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_reciept mark ON mark.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ WHERE CONVERT( varchar(150), spec.mark ) = ''[[ STDF( sgtin ) ]]'' AND mark.action = ''TAP'' AND mark.note = ''[[ КомментарийПостановки ]]'' )/##CHR(13)##//##CHR(10)##/ BEGIN/##CHR(13)##//##CHR(10)##/ EXEC sp_rmk_markdoc ''[[ firm ]]'', ''[[ nn ]]'', ''[[ КомментарийПостановки ]]'', ''[[ STDF( sgtin ) ]]'', [[ kolp ]], ''[[ expirationDate ]]'', ''beer''/##CHR(13)##//##CHR(10)##/ END /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SQLERROR/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при записи документа ""Постановка на кран"" с номером " + /##CHR(13)##//##CHR(10)##/ chequeNumber + " от " + tranzDate + " " + tranzTime + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + _ERRORDESCRIPTION, "Загрузка Постановки на кран" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ IF ( docCode == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем операцию постановки на кран (27) или снятия с крана (28), то пропускаем их загрузку в таблицу/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( chequeType ), 27, 28 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1, equipment )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', " + docid + ", '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', ''" + sklad_d + "'', '''', ''" + kskod + "'', " + ecrNumber + ", /##CHR(13)##//##CHR(10)##/ ''" + manager + "'', ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + ", ''" + КодКассы + "'' )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее, предварительно записываем транзакции/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Ждем 20 секунд появления LoadResult.txt/##CHR(13)##//##CHR(10)##///Время = TickCount( );/##CHR(13)##//##CHR(10)##///WHILE ( !ФАЙЛ( ФайлОтветаФронтол ) && TickCount( ) - Время < 20000 ) Ожидание( 1000 );/##CHR(13)##//##CHR(10)##///IF ( ФАЙЛ( ФайлОтветаФронтол ) )/##CHR(13)##//##CHR(10)##/// ВЫПОЛНИТЬ( "notepad", ФайлОтветаФронтол );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( ИмяФайлаФлага );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/СтавкаБезНДС = ЗАПРОС( "SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM sprlistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = ( SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = ( SELECT TOP 1 code FROM/##CHR(13)##//##CHR(10)##/ sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype = '''' ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодФирмыОборудования = ЗАПРОС("SELECT firm FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##///если заполнена фирма в оборудовании, то определяем признак не плательщика НДС из выбранной фирмы/##CHR(13)##//##CHR(10)##///иначе берем выбранныю фирму в группе ресурсов/##CHR(13)##//##CHR(10)##/ЧастьЗапросаФирмаБезНДС = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( КодФирмыОборудования ) )/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = ''" + КодФирмыОборудования + "'' ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = temp.firm ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в группе ресурсов не указана фирма, а указан код ФР и заполнен список фирм в оборудовании, то второй запрос поменять на/##CHR(13)##//##CHR(10)##///ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = (SELECT TOP 1 firm FROM " + СПИСОКФР + " WHERE fr_code = temp.nkkm ) ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##/ЧастьЗапросаРеквизитовАгента = "";/##CHR(13)##//##CHR(10)##/mAgentDetailsCode = "";/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента = ", sprres.f_agentware AS sprres_f_agentware, sprres.vendor AS sprres_vendor "/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Подготовка к формированию файла выгрузки");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname,/##CHR(13)##//##CHR(10)##/ sprres.nnvid AS sprres_nnvid,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype,/##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), 0 ) AS spregais_d_litr,/##CHR(13)##//##CHR(10)##/ sprres.d_litr AS sprres_d_litr,/##CHR(13)##//##CHR(10)##/ sprres.a_proc AS sprres_a_proc,/##CHR(13)##//##CHR(10)##/ sprres.ed AS sprres_ed,/##CHR(13)##//##CHR(10)##/ (SELECT ffdcode FROM spredn WHERE code = sprres.ed) AS ffdcode,/##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS spr_rsubject,/##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.paytype, '''' ) AS spr_paytype,/##CHR(13)##//##CHR(10)##/ sprres.f_make AS sprres_f_make,/##CHR(13)##//##CHR(10)##/ sprres.cat AS sprres_cat,/##CHR(13)##//##CHR(10)##/ sprres.markgroup AS sprres_markgroup,/##CHR(13)##//##CHR(10)##/ sprres.f_mark AS sprres_f_mark,/##CHR(13)##//##CHR(10)##/ sprres.f_marknotrequire AS sprres_f_marknotrequire,/##CHR(13)##//##CHR(10)##/ sprres.f_draft AS sprres_f_draft,/##CHR(13)##//##CHR(10)##/ sprres.gtin AS sprres_gtin,/##CHR(13)##//##CHR(10)##/ sprres.enterprice AS sprres_enterprice,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex(''SPR'', ''S02'', ''ФронтолБезВводаКоличества'', sprres.code, '''', '''', '''' ), 0 ) AS noenterquantity,/##CHR(13)##//##CHR(10)##/ (SELECT TOP 1 fr_code FROM " + СПИСОКФР + " WHERE firm = temp.firm) AS tovar_firm " +/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС + /##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintChek,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintCopy,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintInvoice,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintMark "; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS vizualmodif,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ЛеваяГраница,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ПраваяГраница ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса += " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode /##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Формирование файла выгрузки");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND СписокТоваров.f_subres )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, СписокТоваров.tovar_firm ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ mBarcode = ALLTRIM( СписокТоваров.barcode );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ rsubject = СписокТоваров.spr_rsubject;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( СписокТоваров.spr_paytype ) == 1 OR VAL( СписокТоваров.spr_paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ mPaytype = СписокТоваров.spr_paytype;/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ mPaytype = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), sprres_shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокТоваров.sprres_ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.sprres_nnvid, "481" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.sprres_nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ЕСЛИ( VAL( СписокТоваров.spregais_d_litr ) != 0, СписокТоваров.spregais_d_litr, СписокТоваров.sprres_d_litr ), 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( СписокТоваров.sprres_a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ mEnterPrice = СписокТоваров.sprres_enterprice;/##CHR(13)##//##CHR(10)##/ mNoEnterquantity = СписокТоваров.noenterquantity;/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //значение по умолчанию - обычный товар/##CHR(13)##//##CHR(10)##/ mSIZmark = "";/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = 1;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара:/##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, /##CHR(13)##//##CHR(10)##/ //1520 - обувь, /##CHR(13)##//##CHR(10)##/ //0002 - изделия из меха, /##CHR(13)##//##CHR(10)##/ //0003 - лекарственные препараты, /##CHR(13)##//##CHR(10)##/ //9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, /##CHR(13)##//##CHR(10)##/ //9997 - шины, /##CHR(13)##//##CHR(10)##/ //9996 - фото, /##CHR(13)##//##CHR(10)##/ //9995 - духи и парфюм, /##CHR(13)##//##CHR(10)##/ //9994 - альтернативный табак, /##CHR(13)##//##CHR(10)##/ //9993 - молочная продукция, /##CHR(13)##//##CHR(10)##/ //9992 - вода/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //9990 - никотинсодержащая продукция/##CHR(13)##//##CHR(10)##/ //9989 - пиво и пивные напитки/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //0000 - СИЗ - выгружается как обычный товар/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.sprres_markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9993", 13, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9991", 14, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9992", 15, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9990", 16,/##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0000", 0, 7 ) ) ) ) ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для СИЗ передадим код из поля GTIN в 64 поле/##CHR(13)##//##CHR(10)##/ mSIZmark = ЕСЛИ( СписокТоваров.sprres_markgroup == "0000", СписокТоваров.sprres_gtin, "");/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = ЕСЛИ( СписокТоваров.sprres_f_marknotrequire,1,0);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //обычный товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 2 ) //подакцизный товар/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 3 ) //работа/##CHR(13)##//##CHR(10)##/ rsubject = "3";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 4 ) //услуга/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 13 ) //иной предмет расчета/##CHR(13)##//##CHR(10)##/ rsubject = "6";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 10 ) //платеж/##CHR(13)##//##CHR(10)##/ rsubject = "7"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 11 ) //агентское вознаграждение/##CHR(13)##//##CHR(10)##/ rsubject = "8"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 7 ) //лотерейный билет/##CHR(13)##//##CHR(10)##/ rsubject = "9"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 9 ) //результаты интеллектуальной деятельности/##CHR(13)##//##CHR(10)##/ rsubject = "10";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 12 ) //выплата/##CHR(13)##//##CHR(10)##/ rsubject = "11";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 18 ) //курортный сбор/##CHR(13)##//##CHR(10)##/ rsubject = "12";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 27 ) //выдача денежных средств/##CHR(13)##//##CHR(10)##/ rsubject = "13";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_agentware == true AND !ПУСТО(СписокТоваров.sprres_vendor) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAgentDetailsCode = VAL(СписокТоваров.sprres_vendor);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СписокТоваров.ffdcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.ffdcode == 0 )/##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 10 )/##CHR(13)##//##CHR(10)##/ mffdcode = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 11 )/##CHR(13)##//##CHR(10)##/ mffdcode = 2; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 12 )/##CHR(13)##//##CHR(10)##/ mffdcode = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 20 )/##CHR(13)##//##CHR(10)##/ mffdcode = 4; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 21 )/##CHR(13)##//##CHR(10)##/ mffdcode = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 22 )/##CHR(13)##//##CHR(10)##/ mffdcode = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 30 )/##CHR(13)##//##CHR(10)##/ mffdcode = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 31 )/##CHR(13)##//##CHR(10)##/ mffdcode = 8;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 32 )/##CHR(13)##//##CHR(10)##/ mffdcode = 9;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 40 )/##CHR(13)##//##CHR(10)##/ mffdcode = 10; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 41 )/##CHR(13)##//##CHR(10)##/ mffdcode = 11; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 42 )/##CHR(13)##//##CHR(10)##/ mffdcode = 12;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 50 )/##CHR(13)##//##CHR(10)##/ mffdcode = 13;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 51 )/##CHR(13)##//##CHR(10)##/ mffdcode = 14; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 70 )/##CHR(13)##//##CHR(10)##/ mffdcode = 15; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 71 )/##CHR(13)##//##CHR(10)##/ mffdcode = 16; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 72 )/##CHR(13)##//##CHR(10)##/ mffdcode = 17; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 73 )/##CHR(13)##//##CHR(10)##/ mffdcode = 18;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 80 )/##CHR(13)##//##CHR(10)##/ mffdcode = 19; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 81 )/##CHR(13)##//##CHR(10)##/ mffdcode = 20; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 82 )/##CHR(13)##//##CHR(10)##/ mffdcode = 21; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 83 )/##CHR(13)##//##CHR(10)##/ mffdcode = 22; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 255 )/##CHR(13)##//##CHR(10)##/ mffdcode = 23; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( СписокТоваров.cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( mCena ) <= 0 AND !f_hchild )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", ALLTRIM( nngroup ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( parent == 0, 0, ABS( parent ) + IIF(parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/ //если в карточке фирмы установлен флаг "Не является плательщиком НДС", то выгружаем ставку БезНДС для товара/##CHR(13)##//##CHR(10)##/ IF ( f_nalogs AND firm_fwonds )/##CHR(13)##//##CHR(10)##/ mKodn = ALLTRIM( STR( VAL( СтавкаБезНДС ) ) );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = STDE( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mFlags = ЕСЛИ( fractqty OR waretype == 0 OR РазливнойАлко, "1", "0") + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "1" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "1" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty OR РазливнойАлко OR !mNoEnterquantity, "0", "1" ) + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ "1" + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty OR РазливнойАлко, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ "," + //11. скидки/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mEnterPrice, "1", "" ) + "," + //12. запрос цены/##CHR(13)##//##CHR(10)##/ "," + //13. запрос штрихкода/##CHR(13)##//##CHR(10)##/ "," + //14. округление/##CHR(13)##//##CHR(10)##/ ","; //15. деление упаковки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mFlagsV = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "0" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "0" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ "1" + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ "1" + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ "," + //11. скидки/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mEnterPrice, "1", "" ) + "," + //12. запрос цены/##CHR(13)##//##CHR(10)##/ "," + //13. запрос штрихкода/##CHR(13)##//##CHR(10)##/ "," + //14. округление/##CHR(13)##//##CHR(10)##/ ","; //15. деление упаковки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/ IF ( !_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" //1. Идентификатор товара (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + mBarcode + ";" //2. Штрихкод (Строка 1024)/##CHR(13)##//##CHR(10)##/ + STDE( mName, 100 ) + ";" //3. Наименование (Строка 128)/##CHR(13)##//##CHR(10)##/ + STDE( mCname, 100 ) + ";" //4. Наименование для печати (Строка 128)/##CHR(13)##//##CHR(10)##/ + mCena + ";" //5. Цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mTmcSaldo + ";" //6. Остаток (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //7. - (Целое)/##CHR(13)##//##CHR(10)##/ + mFlags + ";" //8. флаги (Строка)/##CHR(13)##//##CHR(10)##/ + mMin_cena + ";" //9. минимальная цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mStore_period + ";" //10. срок годности (Дата)/##CHR(13)##//##CHR(10)##/ + mAspect_sch + ";" //11. код схемы разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + mAspect_var + ";" //12. вариант использования разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + rsubject + ";" //13. признак предмета расчета (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //14. коэффициент штрихкода (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //15. - (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + mParent + ";" //16. Код родительской группы (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + "1;" //17. товар или группа: 0 - группа, 1 - товар (Целое 1)/##CHR(13)##//##CHR(10)##/ + ";" //18. - (Целое)/##CHR(13)##//##CHR(10)##/ + "0;" //19. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //20. серия (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //21. сертификат (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //22. - (Целое)/##CHR(13)##//##CHR(10)##/ + mKodn + ";" //23. Код налоговой группы (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //24. Код весов с ПЭ (Целое, по умолчанию = 0)/##CHR(13)##//##CHR(10)##/ + mPlu + ";" //25. Код товара в весах ПЭ. (Целое, max = 999999999)/##CHR(13)##//##CHR(10)##/ + mArticle + ";" //26. Артикул (Строка 20)/##CHR(13)##//##CHR(10)##/ + mVtype + ";" //27. Тип скидки (Целое, 0-процентная, м.б. только %-я)/##CHR(13)##//##CHR(10)##/ + mDsc_value + ";" //28. Значение скидки (строка 100)/##CHR(13)##//##CHR(10)##/ + mActionPriz + ";" //29. Максимальная скидка (Дробное)/##CHR(13)##//##CHR(10)##/ + mCheckPrinter + ";" //30. Код группы печати (Целое, особенности в рук.интегратора)/##CHR(13)##//##CHR(10)##/ + mImage_path + ";" //31. Файл с картинкой (Строка) *.bmp, *.jpg, *.jpeg, *.wmf, *.ico, *.emf, *.svg, *.png/##CHR(13)##//##CHR(10)##/ + mNote + ";" //32. Описание (строка)/##CHR(13)##//##CHR(10)##/ + ";" //33. Кратность количества (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + "0;" //34. Код ценника (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //35. Тип вознаграждения (Целое). 0- процентное, 1- суммовое. По умолчанию =0/##CHR(13)##//##CHR(10)##/ + ";" //36. Значение вознаграждения (Дробное)/##CHR(13)##//##CHR(10)##/ + mKkm_section + ";" //37. Номер секции ККМ (Целое, max = 99). По умолчанию =0 /##CHR(13)##//##CHR(10)##/ + ";" //38. ГТД (строка 100)/##CHR(13)##//##CHR(10)##/ + kodGrPintChek + ";" //39. Код группы печати чека (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintCopy + ";" //40. Код группы печати копии (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintInvoice + ";" //41. Код группы печати счета (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintMark + ";" //42. Код группы печати марки (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //43. Код предприятия (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //44. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //45. Номер сообщения в весах с ПЭ (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //46. - /##CHR(13)##//##CHR(10)##/ + vizualmodif + ";" //47. Значение флага "Визуальный выбор модификаторов при регистрации" (Целое)/##CHR(13)##//##CHR(10)##/ + ЛеваяГраница + ";" //48. Левая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ПраваяГраница + ";" //49. Правая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //50. Текстовое сообщение для весов с ПЭ (строка)/##CHR(13)##//##CHR(10)##/ + ";" //51. -/##CHR(13)##//##CHR(10)##/ + mF_marknotrequire + ";"; //52. Значение флага «Разрешить регистрацию без штрихкода маркировки» (Целое)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ( mAlco OR ПивнаяПродукция ) AND !РазливнойАлко )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += mNNVid + ";" //53. Код вида алкогольной / спиртосодержащей продукции Значение по умолчанию: 10. (Целое)/##CHR(13)##//##CHR(10)##/ + mVolume + ";" //54. Емкость тары, л Значение по умолчанию: 1,000. (Дробное 10.6)/##CHR(13)##//##CHR(10)##/ + mMarkGroup + ";" //55. Тип номенклатуры (Целое)/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" //56. Маркировка алкогольной продукции (Целое)/##CHR(13)##//##CHR(10)##/ + mAProc + ";"; //57. Крепость алкогольной продукции, % (Дробное). Значение по умолчанию: 0,1/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //Обычный товар/##CHR(13)##//##CHR(10)##/ Строка += ";" //53. Код вида алкогольной / спиртосодержащей продукции Значение по умолчанию: 10. (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //54. Емкость тары, л Значение по умолчанию: 1,000. (Дробное 10.6)/##CHR(13)##//##CHR(10)##/ + mMarkGroup + ";" //55. Тип номенклатуры (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //56. Маркировка алкогольной продукции (Целое)/##CHR(13)##//##CHR(10)##/ + ";"; //57. Крепость алкогольной продукции, % (Дробное). Значение по умолчанию: 0,1/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Строка += mPaytype + ";" //58.Признак способа расчета: 1 – аванс; 2 – полный расчет. Значение по умолчанию: 2./##CHR(13)##//##CHR(10)##/ + ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" //59. Код реквизитов агента (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //60. Сумма акциза (Дробное)/##CHR(13)##//##CHR(10)##/ + ";" //61. Код страны происхождения товара (Строка 3)/##CHR(13)##//##CHR(10)##/ + ";" //62. Номер таможенной декларации (Строка 32)/##CHR(13)##//##CHR(10)##/ + ";" //63. Наименование лотереи (Целое)/##CHR(13)##//##CHR(10)##/ + mSIZmark + ";" //64. Код вида номенклатурной классификации (EAN-13) (Строка 13)/##CHR(13)##//##CHR(10)##/ + ";" //65. Проверка соответствия товара штрихкоду маркировки (Целое). 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ + mffdcode; //66. Мера количества предмета расчета (Целое)/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/ IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mffdcode = 11; //литр/##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" //1. Идентификатор товара (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( _ВЫГРУЖАТЬШКДЛЯРАЗЛИВНОЙПРОДУКЦИИ_ФРОНТОЛ52, mBarcode, "" ) + ";" //2. Штрихкод (Строка 1024)/##CHR(13)##//##CHR(10)##/ + STDE( "ВТ " + mName, 100 ) + ";" //3. Наименование (Строка 128)/##CHR(13)##//##CHR(10)##/ + STDE( "ВТ " + mCname, 100 ) + ";" //4. Наименование для печати (Строка 128)/##CHR(13)##//##CHR(10)##/ + mCena + ";" //5. Цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mTmcSaldo + ";" //6. Остаток (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //7. - (Целое)/##CHR(13)##//##CHR(10)##/ + mFlagsV + ";" //8. флаги (Строка)/##CHR(13)##//##CHR(10)##/ + mMin_cena + ";" //9. минимальная цена (Дробное)/##CHR(13)##//##CHR(10)##/ + mStore_period + ";" //10. срок годности (Дата)/##CHR(13)##//##CHR(10)##/ + mAspect_sch + ";" //11. код схемы разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + mAspect_var + ";" //12. вариант использования разрезов (Целое)/##CHR(13)##//##CHR(10)##/ + rsubject + ";" //13. признак предмета расчета (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //14. коэффициент штрихкода (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + ";" //15. - (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + mParent + ";" //16. Код родительской группы (Строка 20/ Целое)/##CHR(13)##//##CHR(10)##/ + "1;" //17. товар или группа: 0 - группа, 1 - товар (Целое 1)/##CHR(13)##//##CHR(10)##/ + ";" //18. - (Целое)/##CHR(13)##//##CHR(10)##/ + "0;" //19. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //20. серия (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //21. сертификат (Строка 100)/##CHR(13)##//##CHR(10)##/ + ";" //22. - (Целое)/##CHR(13)##//##CHR(10)##/ + mKodn + ";" //23. Код налоговой группы (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //24. Код весов с ПЭ (Целое, по умолчанию = 0)/##CHR(13)##//##CHR(10)##/ + mPlu + ";" //25. Код товара в весах ПЭ. (Целое, max = 999999999)/##CHR(13)##//##CHR(10)##/ + "Для вскрытия тары;" //26. Артикул (Строка 20)/##CHR(13)##//##CHR(10)##/ + mVtype + ";" //27. Тип скидки (Целое, 0-процентная, м.б. только %-я)/##CHR(13)##//##CHR(10)##/ + mDsc_value + ";" //28. Значение скидки (строка 100)/##CHR(13)##//##CHR(10)##/ + mActionPriz + ";" //29. Максимальная скидка (Дробное)/##CHR(13)##//##CHR(10)##/ + mCheckPrinter + ";" //30. Код группы печати (Целое, особенности в рук.интегратора)/##CHR(13)##//##CHR(10)##/ + mImage_path + ";" //31. Файл с картинкой (Строка) *.bmp, *.jpg, *.jpeg, *.wmf, *.ico, *.emf, *.svg, *.png/##CHR(13)##//##CHR(10)##/ + mNote + ";" //32. Описание (строка)/##CHR(13)##//##CHR(10)##/ + ";" //33. Кратность количества (Дробное 7.4)/##CHR(13)##//##CHR(10)##/ + "0;" //34. Код ценника (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //35. Тип вознаграждения (Целое). 0- процентное, 1- суммовое. По умолчанию =0/##CHR(13)##//##CHR(10)##/ + ";" //36. Значение вознаграждения (Дробное)/##CHR(13)##//##CHR(10)##/ + mKkm_section + ";" //37. Номер секции ККМ (Целое, max = 99). По умолчанию =0 /##CHR(13)##//##CHR(10)##/ + ";" //38. ГТД (строка 100)/##CHR(13)##//##CHR(10)##/ + kodGrPintChek + ";" //39. Код группы печати чека (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintCopy + ";" //40. Код группы печати копии (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintInvoice + ";" //41. Код группы печати счета (Целое)/##CHR(13)##//##CHR(10)##/ + kodGrPintMark + ";" //42. Код группы печати марки (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //43. Код предприятия (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //44. - (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //45. Номер сообщения в весах с ПЭ (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //46. - /##CHR(13)##//##CHR(10)##/ + vizualmodif + ";" //47. Значение флага "Визуальный выбор модификаторов при регистрации" (Целое)/##CHR(13)##//##CHR(10)##/ + ЛеваяГраница + ";" //48. Левая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ПраваяГраница + ";" //49. Правая граница допустимого суммарного удельного веса модификаторов (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //50. Текстовое сообщение для весов с ПЭ (строка)/##CHR(13)##//##CHR(10)##/ + ";" //51. -/##CHR(13)##//##CHR(10)##/ + mF_marknotrequire + ";" //52. Значение флага «Разрешить регистрацию без штрихкода маркировки» (Целое)/##CHR(13)##//##CHR(10)##/ + mNNVid + ";" //53. Код вида алкогольной / спиртосодержащей продукции Значение по умолчанию: 10. (Целое)/##CHR(13)##//##CHR(10)##/ + mVolume + ";" //54. Емкость тары, л Значение по умолчанию: 1,000. (Дробное 10.6)/##CHR(13)##//##CHR(10)##/ + "1;" //55. Тип номенклатуры (Целое)/##CHR(13)##//##CHR(10)##/ + ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" //56. Маркировка алкогольной продукции (Целое)/##CHR(13)##//##CHR(10)##/ + mAProc + ";" //57. Крепость алкогольной продукции, % (Дробное). Значение по умолчанию: 0,1 /##CHR(13)##//##CHR(10)##/ + mPaytype + ";" //58.Признак способа расчета: 1 – аванс; 2 – полный расчет. Значение по умолчанию: 2./##CHR(13)##//##CHR(10)##/ + ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" //59. Код реквизитов агента (Целое)/##CHR(13)##//##CHR(10)##/ + ";" //60. Сумма акциза (Дробное)/##CHR(13)##//##CHR(10)##/ + ";" //61. Код страны происхождения товара (Строка 3)/##CHR(13)##//##CHR(10)##/ + ";" //62. Номер таможенной декларации (Строка 32)/##CHR(13)##//##CHR(10)##/ + ";" //63. Наименование лотереи (Целое)/##CHR(13)##//##CHR(10)##/ + mSIZmark + ";" //64. Код вида номенклатурной классификации (EAN-13) (Строка 13)/##CHR(13)##//##CHR(10)##/ + ";" //65. Проверка соответствия товара штрихкоду маркировки (Целое). 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ + mffdcode; //66. Мера количества предмета расчета (Целое)/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТоваров");/##CHR(13)##//##CHR(10)##/ИНДИКАТОР();/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол 6 (вскрытие тары)','ККМ',0.00000000,'Профиль обмена с программным обеспечением Frontol 6.19.2 и выше. Совместим с Айтида, начиная с версии 4.5.0. Поддерживает выгрузку мерного алкоголя двумя карточками: одна карточка товара с алкопризнаками для вскрытия, вторая - обычный товар для розни',0.00000000,7405.00000000,0,'',0.00000000,'','',0,'C29C1AE6-C64C-4715-90E0-5DCD5B416E99',0,1,0,'22.02.2024 14:44:21') #begin #description Обмен данными с Фронтол XPos 3 #name Обмен данными с Фронтол XPos 3 #code 0000000157 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 1;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если надо, то выгружаем алкокоды/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nnvid, sprnn.ed, egais.alcocode,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS alcotype,/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ // Если продукция разливная, то алкокод связываем со второй карточкой, которая для вскрытия тары/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокАлкокодов.alcotype ) == 1 AND !ВСПИСКЕ( СписокАлкокодов.nnvid, "481" ); /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, СписокАлкокодов.maincode + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 5000 );/##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //очистка реквизитов агента при установке флага очистки ККМ перед загрузкой/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, inn, legal_adress, telefon, agent_type, agent_oper, agent_telephone_pa, agent_name_op, agent_inn_op, agent_address_op, agent_telephone_op, agent_telephone_pp/##CHR(13)##//##CHR(10)##/ FROM sprclient /##CHR(13)##//##CHR(10)##/ WHERE code IN (SELECT sprres.vendor FROM sprres sprres/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code AND sprres.f_agentware = 1 )","ПоставщикиАгенты");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("ПоставщикиАгенты") > 0)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "ПоставщикиАгенты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем строку реквизитов, только обязательными для конкретного типа агента реквизитами для того чтобы правильно формировались тэги в чеке/##CHR(13)##//##CHR(10)##/ IF ( VAL(ПоставщикиАгенты.agent_type) == 0 OR VAL(ПоставщикиАгенты.agent_type) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";;;;;" + LEFT( ПоставщикиАгенты.agent_telephone_pp , 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 2 OR VAL(ПоставщикиАгенты.agent_type) == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( ПоставщикиАгенты.agent_oper ), 24 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";" + LEFT ( ПоставщикиАгенты.agent_name_op, 64 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT ( ПоставщикиАгенты.agent_inn_op, 10) + ";" + LEFT( ПоставщикиАгенты.agent_address_op , 256 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_op , 100 ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 4 OR VAL(ПоставщикиАгенты.agent_type) == 5 OR VAL(ПоставщикиАгенты.agent_type) == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;;;;;;;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СтрокаПоставщика))/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СтрокаПоставщика );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ПоставщикиАгенты" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( wday_min <= wday_max )/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min OR day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";" + //1. идентификатор/##CHR(13)##//##CHR(10)##/ ";" + //2. /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //3. наименование/##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //4. текст/##CHR(13)##//##CHR(10)##/ ";" + //5. /##CHR(13)##//##CHR(10)##/ ";" + //6. /##CHR(13)##//##CHR(10)##/ ";" + //7. не используется/##CHR(13)##//##CHR(10)##/ ";" + //8. /##CHR(13)##//##CHR(10)##/ "0.00" + ";" + //9. минимальная цена/##CHR(13)##//##CHR(10)##/ ";" + //10. /##CHR(13)##//##CHR(10)##/ "0" + ";" + //11. код схемы разрезов/##CHR(13)##//##CHR(10)##/ ";" + //12. /##CHR(13)##//##CHR(10)##/ ";" + //13. /##CHR(13)##//##CHR(10)##/ ";" + //14. /##CHR(13)##//##CHR(10)##/ ";" + //15. не используется/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), "", ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) + ";" + //16.код родительской группы/##CHR(13)##//##CHR(10)##/ "0" + ";" + //17. товар или группа. "0" для группы/##CHR(13)##//##CHR(10)##/ ";" + //18. /##CHR(13)##//##CHR(10)##/ ";" + //19. /##CHR(13)##//##CHR(10)##/ ";" + //20. /##CHR(13)##//##CHR(10)##/ ";" + //21. /##CHR(13)##//##CHR(10)##/ ";" + //22. /##CHR(13)##//##CHR(10)##/ ";" + //23. код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. /##CHR(13)##//##CHR(10)##/ ";" + //25. /##CHR(13)##//##CHR(10)##/ ";" + //26. артикул/##CHR(13)##//##CHR(10)##/ ";" + //27. тип скидки/##CHR(13)##//##CHR(10)##/ ";" + //28. значение скидки/##CHR(13)##//##CHR(10)##/ ";" + //29. максимальная скидка/##CHR(13)##//##CHR(10)##/ ";" + //30. /##CHR(13)##//##CHR(10)##/ ";" + //31. файл с картинкой/##CHR(13)##//##CHR(10)##/ ";" + //32. описание/##CHR(13)##//##CHR(10)##/ ";" + //33. /##CHR(13)##//##CHR(10)##/ ";" + //34. /##CHR(13)##//##CHR(10)##/ ";" + //35. /##CHR(13)##//##CHR(10)##/ ";" + //36. /##CHR(13)##//##CHR(10)##/ ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ ";" + //39. код группы печати чека/##CHR(13)##//##CHR(10)##/ ";" + //40. код группы печати копии/##CHR(13)##//##CHR(10)##/ ";" + //41. код группы печати счета/##CHR(13)##//##CHR(10)##/ ";" + //42. код группы печати марки/##CHR(13)##//##CHR(10)##/ ";"; //43. код предприятия/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьПризнакЗагрузки = ЕСЛИ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ, f_checkdone, ЗАПРОС("SELECT f_checkdone_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроверятьПризнакЗагрузки )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'PUBLIC ИСТОЧНИКДАТЫ, ДЕЛИТЬПОККМ, ДЕЛИТЬПОКС, СКЛАДЫИЗГРУПП, ФИРМЫИЗГРУПП, СПИСОКФР, ККМ_КОДОБОРУДОВАНИЯ,/##CHR(13)##//##CHR(10)##/КОДФРОНТ2, КОДФРОНТ3, КОДФРОНТ4, КОДФРОНТ5, КОДФРОНТ6;/##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАГРУЖАТЬЧЕКИ = ПЕРЕМЕННАЯ("_ФРОНТОЛ_ЗАГРУЖАТЬЧЕКИ", false);/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЖАТЬЧЕКИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ККМ_КОДОБОРУДОВАНИЯ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ IF ( !EQUIPMENT.ККМ_ЗагрузитьТранзакцииВЧеки( ККМ_КОДОБОРУДОВАНИЯ, ИмяФайла, sklad ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Произошла ошибка при загрузке чеков из Фронтол", "Загрузка чеков из Фронтол");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //загружаем ДКС из чеков/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТЫИЗЧЕКОВ", false ) AND !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ RETURN Сервис.РМКСоздатьДокументы( "", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТПРИАВТОМАТИЧЕСКОЙЗАГРУЗКЕ", true ) AND АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Индикатор( );/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА = ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ТИПДОКУМЕНТАТОЛЬКОПОФОРМЕОБМЕНА", false );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ """ + ИМЯОБОРУДОВАНИЯ + """. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП = ЗАПРОС( "SELECT f_sklfromwaregrp FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/БРАТЬСКЛАДЫИЗГРУПП = СКЛАДЫИЗГРУПП OR ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##/tranzDateKeg = "";/##CHR(13)##//##CHR(10)##/tranzTimeKeg = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ sgtin = ALLTRIM( STRTRAN( GetWord( string, ";", 33 ), CHR(164), ";" ) );/##CHR(13)##//##CHR(10)##/ РазделительМарок = "¤"; //символ разделитель марок, который ожидается программой для случаев, когда в одной регистрации несколько марок с разделителем/##CHR(13)##//##CHR(10)##/ exmark = STRTRAN( GETWORD( string, ";", 34 ), ",", РазделительМарок );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = ЕСЛИ( !ПУСТО( VAL( GetWord( string, ";", 22 ) ) ), 1, 0 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, 36, /##CHR(13)##//##CHR(10)##/ 37, 38, 40, 42, 55, 56, 57, 49, 45, 41, 43, 44 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( СЖАТЬПРОБЕЛЫ( СТРОКА( ЧИСЛО( warecode ) ) ) <> СЖАТЬПРОБЕЛЫ( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------Если операция открытия чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 42 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //для постановки на кран запомним дату и время начала формирования операции, /##CHR(13)##//##CHR(10)##/ //т.к. xPOS3 не всегда возвращает дату и время для 11 транзакции в 27й операции/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzDateKeg = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTimeKeg = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectsList ) > 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + " )");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ("_ФРОНТОЛ_ДЕЛИТЬСТРОКИДКСПОВИДАМОПЛАТЫ", false ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )"); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCodePredefined = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16", "008", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( !ПУСТО( docCodePredefined ), docCodePredefined, /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", "008" ))))))));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //инвентаризация/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ2 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ2, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "007"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //приходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ3 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ3, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "001";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ4 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ4, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "002";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //списание, оприходование/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ5 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ5, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "003";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //внутреннее перемещение/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ6 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ6, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "019";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не определили по кодам документов, то ставим тип "ДКС"/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docCode ) )/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем строки из документа, отличного от ДКС, то разделим их по номерам документов/##CHR(13)##//##CHR(10)##/ IF ( docCode <> "008" )/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ store_period = 0;/##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !БРАТЬСКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !БРАТЬСКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем постановку на кран, то необходимо сформировать документ для отправки в ЧЗ/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если в транзакциях 11 не указаны дата и время, то берем из транзакции открытия чека/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzDate ) )/##CHR(13)##//##CHR(10)##/ tranzDate = tranzDateKeg;/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzTime ) )/##CHR(13)##//##CHR(10)##/ tranzTime = tranzTimeKeg;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим длину возвращаемого КМ (xPOS3 возвращает неполный КМ разливного пива)/##CHR(13)##//##CHR(10)##/ //если длина менее 25 символов, то дополним КМ требуемыми идентификаторами/##CHR(13)##//##CHR(10)##/ IF ( LEN( sgtin ) < 25 )/##CHR(13)##//##CHR(10)##/ sgtin = "01" + ПОДСТРОКА( sgtin, 1, 14 ) + "21" + ПОДСТРОКА( sgtin, 15, 7 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомментарийПостановки = "Касса """ + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + """ | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzCount ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzDate ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzTime ) + " | " + /##CHR(13)##//##CHR(10)##/ "док. № " + ALLTRIM( chequeNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( store_period ) )/##CHR(13)##//##CHR(10)##/ expirationDate = ДОБАВИТЬДНИ( CTOD( tranzDate + " " + tranzTime ), store_period );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ expirationDate = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ __SQL()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF NOT EXISTS( SELECT TOP 1 * FROM mark_reciept_spec spec/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_reciept mark ON mark.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ WHERE CONVERT( varchar(150), spec.mark ) = ''[[ STDF( sgtin ) ]]'' AND mark.action = ''TAP'' AND mark.note = ''[[ КомментарийПостановки ]]'' ) /##CHR(13)##//##CHR(10)##/ BEGIN/##CHR(13)##//##CHR(10)##/ EXEC sp_rmk_markdoc ''[[ firm ]]'', ''[[ nn ]]'', ''[[ КомментарийПостановки ]]'', ''[[ STDF( sgtin ) ]]'', [[ kolp ]], ''[[ expirationDate ]]'', ''beer''/##CHR(13)##//##CHR(10)##/ END /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SQLERROR/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при записи документа ""Постановка на кран"" с номером " + /##CHR(13)##//##CHR(10)##/ chequeNumber + " от " + tranzDate + " " + tranzTime + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + _ERRORDESCRIPTION, "Загрузка Постановки на кран" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //обнуляем дату и время операции постановки на кран/##CHR(13)##//##CHR(10)##/ tranzDateKeg = "";/##CHR(13)##//##CHR(10)##/ tranzTimeKeg = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( docCode == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем операцию постановки на кран (27) или снятия с крана (28), то пропускаем их загрузку в таблицу/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( chequeType ), 27, 28 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + ALLTRIM( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ, ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ), "1" ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/СтавкаБезНДС = ЗАПРОС( "SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM sprlistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = ( SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = ( SELECT TOP 1 code FROM/##CHR(13)##//##CHR(10)##/ sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype = '''' ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодФирмыОборудования = ЗАПРОС("SELECT firm FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##///если заполнена фирма в оборудовании, то определяем признак не плательщика НДС из выбранной фирмы/##CHR(13)##//##CHR(10)##///иначе берем выбранныю фирму в группе ресурсов/##CHR(13)##//##CHR(10)##/ЧастьЗапросаФирмаБезНДС = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( КодФирмыОборудования ) )/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = ''" + КодФирмыОборудования + "'' ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = temp.firm ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в группе ресурсов не указана фирма, а указан код ФР и заполнен список фирм в оборудовании, то второй запрос поменять на/##CHR(13)##//##CHR(10)##///ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = (SELECT TOP 1 firm FROM " + СПИСОКФР + " WHERE fr_code = temp.nkkm ) ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##/ЧастьЗапросаРеквизитовАгента = "";/##CHR(13)##//##CHR(10)##/mAgentDetailsCode = "";/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента = ", sprres.f_agentware AS sprres_f_agentware, sprres.vendor AS sprres_vendor "/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Подготовка к формированию файла выгрузки");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid AS sprres_nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype, /##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), 0 ) AS spregais_d_litr, /##CHR(13)##//##CHR(10)##/ sprres.d_litr AS sprres_d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc AS sprres_a_proc, /##CHR(13)##//##CHR(10)##/ sprres.ed AS sprres_ed, /##CHR(13)##//##CHR(10)##/ (SELECT ffdcode FROM spredn WHERE code = sprres.ed) AS ffdcode, /##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume, /##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS spr_rsubject, /##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.paytype, '''' ) AS spr_paytype, /##CHR(13)##//##CHR(10)##/ sprres.f_make AS sprres_f_make, /##CHR(13)##//##CHR(10)##/ sprres.cat AS sprres_cat, /##CHR(13)##//##CHR(10)##/ sprres.markgroup AS sprres_markgroup, /##CHR(13)##//##CHR(10)##/ sprres.f_mark AS sprres_f_mark, /##CHR(13)##//##CHR(10)##/ sprres.f_marknotrequire AS sprres_f_marknotrequire, /##CHR(13)##//##CHR(10)##/ sprres.f_draft AS sprres_f_draft,/##CHR(13)##//##CHR(10)##/ sprres.gtin AS sprres_gtin, /##CHR(13)##//##CHR(10)##/ sprres.enterprice AS sprres_enterprice,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex(''SPR'', ''S02'', ''ФронтолБезВводаКоличества'', sprres.code, '''', '''', '''' ), 0 ) AS noenterquantity,/##CHR(13)##//##CHR(10)##/ (SELECT TOP 1 fr_code FROM " + СПИСОКФР + " WHERE firm = temp.firm) AS tovar_firm " +/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС + /##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintChek,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintCopy,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintInvoice,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintMark "; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS vizualmodif,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ЛеваяГраница,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ПраваяГраница ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса += " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode /##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Формирование файла выгрузки");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND СписокТоваров.f_subres )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, СписокТоваров.tovar_firm ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ mBarcode = ""; //ALLTRIM( СписокТоваров.barcode ); ШК выгрузятся в разделе ШК. Здесь они могут помешать, например для весового товара/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ rsubject = STR( VAL( СписокТоваров.spr_rsubject ) );/##CHR(13)##//##CHR(10)##/ mPaytype = "2";/##CHR(13)##//##CHR(10)##/ IF ( VAL( СписокТоваров.spr_paytype ) == 1 OR VAL( СписокТоваров.spr_paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ mPaytype = STR( VAL( СписокТоваров.spr_paytype ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), sprres_shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.sprres_nnvid, "481" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.sprres_nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ЕСЛИ( VAL( СписокТоваров.spregais_d_litr ) != 0, СписокТоваров.spregais_d_litr, СписокТоваров.sprres_d_litr ), 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( СписокТоваров.sprres_a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ mEnterPrice = СписокТоваров.sprres_enterprice;/##CHR(13)##//##CHR(10)##/ mNoEnterquantity = СписокТоваров.noenterquantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //значение по умолчанию - обычный товар/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = "1";/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара:/##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, /##CHR(13)##//##CHR(10)##/ //1520 - обувь, /##CHR(13)##//##CHR(10)##/ //0002 - изделия из меха, /##CHR(13)##//##CHR(10)##/ //0003 - лекарственные препараты, /##CHR(13)##//##CHR(10)##/ //9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, /##CHR(13)##//##CHR(10)##/ //9997 - шины, /##CHR(13)##//##CHR(10)##/ //9996 - фото, /##CHR(13)##//##CHR(10)##/ //9995 - духи и парфюм, /##CHR(13)##//##CHR(10)##/ //9994 - альтернативный табак, /##CHR(13)##//##CHR(10)##/ //9993 - молочная продукция, /##CHR(13)##//##CHR(10)##/ //9992 - вода/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //9990 - никотинсодержащая продукция/##CHR(13)##//##CHR(10)##/ //9989 - пиво и пивные напитки/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //в xPOS3 есть не все типы маркировки/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.sprres_markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9993", 13, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9991", 14, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9992", 15, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9990", 16, 7 ) ) ) ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mF_marknotrequire = ЕСЛИ( СписокТоваров.sprres_f_marknotrequire, "1", "0");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //обычный товар/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 2 ) //подакцизный товар/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 3 ) //работа/##CHR(13)##//##CHR(10)##/ rsubject = "3";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 4 ) //услуга/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 13 ) //иной предмет расчета/##CHR(13)##//##CHR(10)##/ rsubject = "6";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 10 ) //платеж/##CHR(13)##//##CHR(10)##/ rsubject = "7"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 11 ) //агентское вознаграждение/##CHR(13)##//##CHR(10)##/ rsubject = "8"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 7 ) //лотерейный билет/##CHR(13)##//##CHR(10)##/ rsubject = "9"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 9 ) //результаты интеллектуальной деятельности/##CHR(13)##//##CHR(10)##/ rsubject = "10";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 12 ) //выплата/##CHR(13)##//##CHR(10)##/ rsubject = "11";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 18 ) //курортный сбор/##CHR(13)##//##CHR(10)##/ rsubject = "12";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 27 ) //выдача денежных средств/##CHR(13)##//##CHR(10)##/ rsubject = "13";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_agentware == true AND !ПУСТО(СписокТоваров.sprres_vendor) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAgentDetailsCode = VAL(СписокТоваров.sprres_vendor);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СписокТоваров.ffdcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.ffdcode == 0 )/##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 10 )/##CHR(13)##//##CHR(10)##/ mffdcode = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 11 )/##CHR(13)##//##CHR(10)##/ mffdcode = 2; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 12 )/##CHR(13)##//##CHR(10)##/ mffdcode = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 20 )/##CHR(13)##//##CHR(10)##/ mffdcode = 4; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 21 )/##CHR(13)##//##CHR(10)##/ mffdcode = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 22 )/##CHR(13)##//##CHR(10)##/ mffdcode = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 30 )/##CHR(13)##//##CHR(10)##/ mffdcode = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 31 )/##CHR(13)##//##CHR(10)##/ mffdcode = 8;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 32 )/##CHR(13)##//##CHR(10)##/ mffdcode = 9;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 40 )/##CHR(13)##//##CHR(10)##/ mffdcode = 10; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 41 )/##CHR(13)##//##CHR(10)##/ mffdcode = 11; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 42 )/##CHR(13)##//##CHR(10)##/ mffdcode = 12;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 50 )/##CHR(13)##//##CHR(10)##/ mffdcode = 13;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 51 )/##CHR(13)##//##CHR(10)##/ mffdcode = 14; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 70 )/##CHR(13)##//##CHR(10)##/ mffdcode = 15; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 71 )/##CHR(13)##//##CHR(10)##/ mffdcode = 16; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 72 )/##CHR(13)##//##CHR(10)##/ mffdcode = 17; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 73 )/##CHR(13)##//##CHR(10)##/ mffdcode = 18;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 80 )/##CHR(13)##//##CHR(10)##/ mffdcode = 19; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 81 )/##CHR(13)##//##CHR(10)##/ mffdcode = 20; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 82 )/##CHR(13)##//##CHR(10)##/ mffdcode = 21; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 83 )/##CHR(13)##//##CHR(10)##/ mffdcode = 22; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 255 )/##CHR(13)##//##CHR(10)##/ mffdcode = 23; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( СписокТоваров.cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( mCena ) <= 0 AND !f_hchild )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( IIF( parent == 0, "", STR( ABS( parent ) + IIF( parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/ //если в карточке фирмы установлен флаг "Не является плательщиком НДС", то выгружаем ставку БезНДС для товара/##CHR(13)##//##CHR(10)##/ IF ( f_nalogs AND firm_fwonds )/##CHR(13)##//##CHR(10)##/ mKodn = ALLTRIM( STR( VAL( СтавкаБезНДС ) ) );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = STDE( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mFlags = IIF( fractqty OR waretype == 0, "1", "0") + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "1" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "1" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ mNoEnterquantity + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mEnterPrice, "1", "0" ) + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ IIF( enterqty, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ ","; //11. скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/ IF ( !_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + //1. код/##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2. Штрихкоды через запятую (максимальная длина штрихкода не превышает 40 символов)/##CHR(13)##//##CHR(10)##/ STDE( mName, 128 ) + ";" + //3. Наименование/##CHR(13)##//##CHR(10)##/ STDE( mCname, 128 ) + ";" + //4. Текст для чека/##CHR(13)##//##CHR(10)##/ mCena + ";" + //5. Цена/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6. Остаток/##CHR(13)##//##CHR(10)##/ ";" + //7. Не используется/##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8. флаги контроля/##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9. Минимальная цена/##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10. Не используется/##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11. Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12. Вариант использования разрезов/##CHR(13)##//##CHR(10)##/ rsubject + ";" + //13. Признак предмета расчета/##CHR(13)##//##CHR(10)##/ ";" + //14. Коэффициент штрихкода/##CHR(13)##//##CHR(10)##/ ";" + //15. Не используется/##CHR(13)##//##CHR(10)##/ mParent + ";" + //16. Код родительской группы/##CHR(13)##//##CHR(10)##/ "1" + ";" + //17. Товар или группа: для товара 1, для группы 0/##CHR(13)##//##CHR(10)##/ ";" + //18. Не используется/##CHR(13)##//##CHR(10)##/ "0" + ";" + //19. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //20. Серия/##CHR(13)##//##CHR(10)##/ ";" + //21. Сертификат/##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22. Не используется/##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23. Код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. Не используется/##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25. Не используется/##CHR(13)##//##CHR(10)##/ mArticle + ";" + //26. Артикул/##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27. Не используется/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28. Не используется/##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29. Максимальная скидка, %/##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30. Не используется/##CHR(13)##//##CHR(10)##/ mImage_path +";" + //31. Имя файла с картинкой формата PNG, BMP, JPEG, GIF, TIFF, ICO и путь к нему/##CHR(13)##//##CHR(10)##/ mNote + ";" + //32. Описание/##CHR(13)##//##CHR(10)##/ ";" + //33. Кратность количества/##CHR(13)##//##CHR(10)##/ "0" + ";" + //34. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //35. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //36. Не используется/##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //38. Не используется/##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39. Код ГП товара/##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40. Код ГП копии товара/##CHR(13)##//##CHR(10)##/ ";" + //41. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //42. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //43. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //44. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //45. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //46. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //47. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //48. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //49. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //50. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //51. Не используется/##CHR(13)##//##CHR(10)##/ mF_marknotrequire + ";"; //52. Значение флага «Без ввода ШК маркировки»/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( mAlco OR ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += mNNVid + ";" + //53. Код вида продукции/##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54. Емкость тары, л./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55. Тип номенклатуры/##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56. Маркировка алкогольной продукции/##CHR(13)##//##CHR(10)##/ mAProc + ";"; //57. Крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ";" + //53. Код вида продукции/##CHR(13)##//##CHR(10)##/ ";" + //54. Емкость тары, л./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55. Тип номенклатуры/##CHR(13)##//##CHR(10)##/ ";" + //56. Маркировка алкогольной продукции/##CHR(13)##//##CHR(10)##/ ";"; //57. Крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка += mPaytype + ";" + //58. Признак способа расчета/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" + //59. Код реквизитов агента/##CHR(13)##//##CHR(10)##/ ";" + //60. Сумма акциза, включенная в стоимость товара/##CHR(13)##//##CHR(10)##/ ";" + //61. Код страны происхождения товара (допустимы только цифры)/##CHR(13)##//##CHR(10)##/ ";" + //62. Номер таможенной декларации/##CHR(13)##//##CHR(10)##/ ";" + //63. Наименование лотереи/##CHR(13)##//##CHR(10)##/ ";" + //64. Код вида номенклатурной классификации (EAN-13)/##CHR(13)##//##CHR(10)##/ ";" + //65. Проверка соответствия товара штрихкоду маркировки: 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ mffdcode; //66. Мера количества предмета расчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТоваров");/##CHR(13)##//##CHR(10)##/ИНДИКАТОР();/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол XPos 3','ККМ',0.00000000,'Профиль обмена с программным обеспечением Frontol xPOS 3.11.4 и выше. Совместим с Айтида, начиная с версии 4.5.0',0.00000000,7610.00000000,0,'',0.00000000,'','',0,'F3B27D46-ACAF-4809-86DE-0F9BC5975535',0,1,0,'22.02.2024 14:44:21') #begin #description Обмен данными с Фронтол XPos 3 (вскрытие тары) #name Обмен данными с Фронтол XPos 3 (вскрытие тары) #code 0000000158 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',246.00000000,'PUBLIC ИСТОЧНИКДАТЫ, ДЕЛИТЬПОККМ, ДЕЛИТЬПОКС, СКЛАДЫИЗГРУПП, ФИРМЫИЗГРУПП, СПИСОКФР, ККМ_КОДОБОРУДОВАНИЯ,/##CHR(13)##//##CHR(10)##/КОДФРОНТ2, КОДФРОНТ3, КОДФРОНТ4, КОДФРОНТ5, КОДФРОНТ6;/##CHR(13)##//##CHR(10)##///Загрузка данных./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, загрузку которого необходимо произвести. Данный параметр передается только при файловом обмене./##CHR(13)##//##CHR(10)##///Обработка вызывается для загрузки данных./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной загрузки. иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ЗАГРУЖАТЬЧЕКИ = ПЕРЕМЕННАЯ("_ФРОНТОЛ_ЗАГРУЖАТЬЧЕКИ", false);/##CHR(13)##//##CHR(10)##/IF ( ЗАГРУЖАТЬЧЕКИ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ККМ_КОДОБОРУДОВАНИЯ = КОДОБОРУДОВАНИЯ;/##CHR(13)##//##CHR(10)##/ IF ( !EQUIPMENT.ККМ_ЗагрузитьТранзакцииВЧеки( ККМ_КОДОБОРУДОВАНИЯ, ИмяФайла, sklad ) )/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ("Произошла ошибка при загрузке чеков из Фронтол", "Загрузка чеков из Фронтол");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //загружаем ДКС из чеков/##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТЫИЗЧЕКОВ", false ) AND !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ RETURN Сервис.РМКСоздатьДокументы( "", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ФОРМИРОВАТЬДОКУМЕНТПРИАВТОМАТИЧЕСКОЙЗАГРУЗКЕ", true ) AND АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Индикатор( );/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ RETURN true; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА = ПЕРЕМЕННАЯ( "_ФРОНТОЛ_ТИПДОКУМЕНТАТОЛЬКОПОФОРМЕОБМЕНА", false );/##CHR(13)##//##CHR(10)##/ИМЯОБОРУДОВАНИЯ = ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( "Обработка ККМ """ + ИМЯОБОРУДОВАНИЯ + """. Файл " + ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/fileHandle = ФайлОткрыть( ИмяФайла, 0, 1 );/##CHR(13)##//##CHR(10)##/kkmsklad = sklad;/##CHR(13)##//##CHR(10)##/firm = "";/##CHR(13)##//##CHR(10)##/processCount = 0;/##CHR(13)##//##CHR(10)##/итого = 0.00;/##CHR(13)##//##CHR(10)##///------ Не удалось открыть файл - выходим/##CHR(13)##//##CHR(10)##/IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СистемноеСообщение( );/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось открыть файл ''" + ИмяФайла + "'' загрузки для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------ Первые три строки - заголовок файла, он нам не интересен /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( fileHandle, "@" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/КоличествоСтрок = ФайлКоличествоСтрок( fileHandle );/##CHR(13)##//##CHR(10)##/ДобавитьСообщение( "Количество строк в файле: " + КоличествоСтрок );/##CHR(13)##//##CHR(10)##/Индикатор( "Загрузка данных", КоличествоСтрок );/##CHR(13)##//##CHR(10)##/КоличествоСтрок = 0;/##CHR(13)##//##CHR(10)##/tranzDate = ""; // Дата транзакции/##CHR(13)##//##CHR(10)##/tranzTime = ""; // Время транзакции/##CHR(13)##//##CHR(10)##/foundTranz = false; // Признак того, что нашли транзакции/##CHR(13)##//##CHR(10)##/client = ""; // Код клиента из чека/##CHR(13)##//##CHR(10)##/maxTranzCount = 0; // Будем хранить максимальный номер транзакции/##CHR(13)##//##CHR(10)##/identif = 0;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем контекст со списком ФР и юридическими лицами, которые привязаны к ФР/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT fr_code, firm FROM " + СПИСОКФР, "СписокФР" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьКОДФР = !ПУСТО( ЗАПРОС( "SELECT ex_code + fr_list FROM sprequipment WHERE code = ''" + КодОборудования + "''" ) );/##CHR(13)##//##CHR(10)##/ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП = ЗАПРОС( "SELECT f_sklfromwaregrp FROM sprequipment WHERE code = ''" + КодОборудования + "''" );/##CHR(13)##//##CHR(10)##/БРАТЬСКЛАДЫИЗГРУПП = СКЛАДЫИЗГРУПП OR ОБОРУДОВАНИЕ_СКЛАДЫИЗГРУПП;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/БылиТранзакцииПоФРВыбранномуВТО = FALSE;/##CHR(13)##//##CHR(10)##/tranzDateKeg = "";/##CHR(13)##//##CHR(10)##/tranzTimeKeg = "";/##CHR(13)##//##CHR(10)##/WHILE ( !ФайлКонецФайла( fileHandle ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, "Обработано строк" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ string = ФайлПрочитать( fileHandle, "S" );/##CHR(13)##//##CHR(10)##/ //------ Если строка пустая - пропускаем ее/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( string ) ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Для соответствия номеров полей возвращаемым номерам слов - добавляем разделитель /##CHR(13)##//##CHR(10)##/ string = ";" + string;/##CHR(13)##//##CHR(10)##/ tranzCount = GetWord( string, ";", ";", 1 );/##CHR(13)##//##CHR(10)##/ tranzDate = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTime = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ tranzType = GetWord( string, ";", ";", 4 );/##CHR(13)##//##CHR(10)##/ POSNumber = VAL( GetWord( string, ";", ";", 5 ) );/##CHR(13)##//##CHR(10)##/ chequeNumber = GetWord( string, ";", ";", 6 );/##CHR(13)##//##CHR(10)##/ Seller = STR( VAL( GetWord( string, ";", ";", 7 ) ) );/##CHR(13)##//##CHR(10)##/ wareCode = GetWord( string, ";", ";", 8 );/##CHR(13)##//##CHR(10)##/ AspectsList = GetWord( string, ";", ";", 9 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ AspectValue1 = GetWord( "," + AspectsList, ",", 1 );/##CHR(13)##//##CHR(10)##/ AspectValue2 = GetWord( "," + AspectsList, ",", 2 );/##CHR(13)##//##CHR(10)##/ AspectValue3 = GetWord( "," + AspectsList, ",", 3 );/##CHR(13)##//##CHR(10)##/ AspectValue4 = GetWord( "," + AspectsList, ",", 4 );/##CHR(13)##//##CHR(10)##/ AspectValue5 = GetWord( "," + AspectsList, ",", 5 );/##CHR(13)##//##CHR(10)##/ Price = STRTRAN( GetWord( string, ";", 10 ), ",","." );/##CHR(13)##//##CHR(10)##/ Quantity = STRTRAN( GetWord( string, ";", 11 ), ",","." );/##CHR(13)##//##CHR(10)##/ chequeType = STR( VAL( GetWord( string, ";", 13 ) ) );/##CHR(13)##//##CHR(10)##/ ecrSession = GetWord( string, ";", 14 );/##CHR(13)##//##CHR(10)##/ PriceWD = STRTRAN( GetWord( string, ";", 15 ), ",","." );/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 16 ), ",","." );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ecrNumber = ALLTRIM( STR( VAL( GetWord( string, ";", 17 ) ) ) );/##CHR(13)##//##CHR(10)##/ wareMark = STRTRAN( GetWord( string, ";", 18 ), CHR(164), ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ sgtin = ALLTRIM( STRTRAN( GetWord( string, ";", 33 ), CHR(164), ";" ) );/##CHR(13)##//##CHR(10)##/ РазделительМарок = "¤"; //символ разделитель марок, который ожидается программой для случаев, когда в одной регистрации несколько марок с разделителем/##CHR(13)##//##CHR(10)##/ exmark = STRTRAN( GETWORD( string, ";", 34 ), ",", РазделительМарок );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ barcode = ЕСЛИ( !ПУСТО( exmark ), exmark, GetWord( string, ";", 19 ) );/##CHR(13)##//##CHR(10)##/ Summ = STRTRAN( GetWord( string, ";", 20 ), ",","." );/##CHR(13)##//##CHR(10)##/ currency = GetWord( string, ";", 21 );/##CHR(13)##//##CHR(10)##/ education = ЕСЛИ( !ПУСТО( VAL( GetWord( string, ";", 22 ) ) ), 1, 0 );/##CHR(13)##//##CHR(10)##/ dockIndCode = GetWord( string, ";", 23 );/##CHR(13)##//##CHR(10)##/ commentCode = GetWord( string, ";", 24 );/##CHR(13)##//##CHR(10)##/ universalNDOK = GetWord( string, ";", 26 );/##CHR(13)##//##CHR(10)##/ karta = "";/##CHR(13)##//##CHR(10)##/ documentClient = "";/##CHR(13)##//##CHR(10)##/ manager = GetWord( string, ";", 28 );/##CHR(13)##//##CHR(10)##/ warecode_org = warecode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( INLIST( VAL( tranzType ), 5, 15, 6, 16, 7, 17, 8, 18, 75, 85, 76, 86, 77, 87, 78, 88, 35, /##CHR(13)##//##CHR(10)##/ 36, 37, 38, 40, 42, 55, 56, 57, 49, 45, 41, 43, 44 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Заменяем служебный символ на точку с запято/##CHR(13)##//##CHR(10)##/ karta = STRTRAN( warecode, CHR( 164 ), ";" );/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//* IF ( СЖАТЬПРОБЕЛЫ( СТРОКА( ЧИСЛО( warecode ) ) ) <> СЖАТЬПРОБЕЛЫ( warecode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ warecode = "";/##CHR(13)##//##CHR(10)##/ warecode_org= "";/##CHR(13)##//##CHR(10)##/ }*//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------Если операция открытия чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 42 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //для постановки на кран запомним дату и время начала формирования операции, /##CHR(13)##//##CHR(10)##/ //т.к. xPOS3 не всегда возвращает дату и время для 11 транзакции в 27й операции/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ tranzDateKeg = GetWord( string, ";", ";", 2 );/##CHR(13)##//##CHR(10)##/ tranzTimeKeg = GetWord( string, ";", ";", 3 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Если операция закрытие чека/##CHR(13)##//##CHR(10)##/ IF ( VAL( tranzType ) == 55 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ SummWD = STRTRAN( GetWord( string, ";", 12 ), ",","." );/##CHR(13)##//##CHR(10)##/ documentClient = priceWD;/##CHR(13)##//##CHR(10)##/ priceWD = "";/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) AND VAL( documentClient ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE code = (SELECT card FROM sprmclient WHERE dbo.fn_chartoint( code ) = " + STR( VAL( documentClient ) ) + ")" );/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( karta ) )/##CHR(13)##//##CHR(10)##/ karta = ЗАПРОС( "SELECT cardn FROM sprmcard WHERE client = " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( wareCode ) > 90000000 )/##CHR(13)##//##CHR(10)##/ wareCode = STR( VAL( warecode ) - 90000000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Определяем, входит ли текущий ФР в список обрабатываемых ФР/##CHR(13)##//##CHR(10)##/ IF ( ПроверятьКОДФР AND !Найти( "СписокФР", "СписокФР.fr_code == ''" + UPPER( ALLTRIM( ecrNumber ) ) + "''" ) ) CONTINUE;/##CHR(13)##//##CHR(10)##/ БылиТранзакцииПоФРВыбранномуВТО = TRUE;/##CHR(13)##//##CHR(10)##/ //-------- Запоминаем /##CHR(13)##//##CHR(10)##/ firm = СписокФР.firm;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Если транзакцию с полученным номером уже обрабатывали, то пропускаем строку/##CHR(13)##//##CHR(10)##/ IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM "+ ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE id = " + STR( VAL( tranzCount ) ) + " AND posnumber = " + STR( posNumber ) +") /##CHR(13)##//##CHR(10)##/ THEN 1 ELSE 0 END " ) == 1 ) CONTINUE;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ tranzCount = VAL( tranzCount );/##CHR(13)##//##CHR(10)##/ maxTranzCount = MAX( maxTranzCount, tranzCount );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ docCode = "";/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ nn = warecode;/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ kolp = VAL( Quantity );/##CHR(13)##//##CHR(10)##/ summasale = VAL( SummWD );/##CHR(13)##//##CHR(10)##/ summa = VAL( Summ );/##CHR(13)##//##CHR(10)##/ cena = VAL( Price );/##CHR(13)##//##CHR(10)##/ nnname = "";/##CHR(13)##//##CHR(10)##/ ed = "";/##CHR(13)##//##CHR(10)##/ kodn = "";/##CHR(13)##//##CHR(10)##/ client = "";/##CHR(13)##//##CHR(10)##/ summabn = 0.00;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Анализируем тип транзакции и в зависимости от него выполняем разные действия/##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие смены. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ //------- Операция - Z-отчет. Проставляем дату и время для всей смены./##CHR(13)##//##CHR(10)##/ IF ( ( tranzType == "61" AND ИСТОЧНИКДАТЫ == 3 ) OR ( tranzType == "63" AND ИСТОЧНИКДАТЫ == 4 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ date = CTOD( tranzDate + " " + tranzTime );/##CHR(13)##//##CHR(10)##/ IF ( ИСТОЧНИКДАТЫ == 3 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( date ) + "'' WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND fr_code= " + ecrNumber );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - Закрытие чека. Проставляем код клиента./##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" AND VAL( documentClient ) <> 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------- Определяем код клиента по доп. коду и проставляем его для всего чека./##CHR(13)##//##CHR(10)##/ client = ЗАПРОС( "SELECT code FROM sprclient WHERE dbo.fn_chartoint( ex_code )= " + STR( VAL( documentClient ) ) );/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET client = ''" + client + "'' WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Округления /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "55" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Необходимо рассчитать процент скидки/##CHR(13)##//##CHR(10)##/ СуммаЧека = ЗАПРОС( "SELECT SUM( summasale ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE " + ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND ecrsession = " + STR( VAL( ecrSession ) ) + " AND transtype IN ( 1, 2, 11, 12 ) ");/##CHR(13)##//##CHR(10)##/ IF ( ABS( СуммаЧека ) > ABS( VAL( SummWD ) ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Пересчитываем суммы в чеке/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summasale = summasale - " + СТРОКА( СуммаЧека - VAL( SummWD ), 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = /##CHR(13)##//##CHR(10)##/ (SELECT MIN( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE ecrsession = " + STR( VAL( ecrSession ) ) + " AND " +/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) + " AND transtype IN ( 1, 2, 11, 12 ) )");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Операция - отмена чека /##CHR(13)##//##CHR(10)##/ IF ( tranzType == "56" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если данные содержат уникальный номер документа, то помечаем на удаление чек по этому номеру./##CHR(13)##//##CHR(10)##/ // Иначе просто по номеру чека/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET f_deleted = 1 WHERE " + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( !EMPTY( universalNDOK ), "ndok = ''" + universalNDOK + "''", "chequeNumber = " + STR( VAL( chequeNumber ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- В транзакциях оплаты сумма записывается в поле 12/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "40" OR tranzType == "41" OR tranzType == "43" )/##CHR(13)##//##CHR(10)##/ Summa = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------- Безналичные оплаты/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "43" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( AspectsList ) > 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Summabn = VAL( STRTRAN( GetWord( string, ";", 12 ),",","." ) );/##CHR(13)##//##CHR(10)##/ //------ Проставляем сумму безналичной оплаты у одной из записей о продаже/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET summabn = summabn + " + STR( summabn, 16, 2 ) + "/##CHR(13)##//##CHR(10)##/ WHERE identity_column = (SELECT MAX( identity_column ) FROM " + ИМЯТАБЛИЦЫ + " /##CHR(13)##//##CHR(10)##/ WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 ) AND fr_code= " + ecrNumber + " )");/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ // Отмечаем особым образом транзакции для отображения в документе в виде без/нала /##CHR(13)##//##CHR(10)##/ IF ( ПЕРЕМЕННАЯ("_ФРОНТОЛ_ДЕЛИТЬСТРОКИДКСПОВИДАМОПЛАТЫ", false ) )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET chequetype = " + VAL( aspectsList ) * 100 + " + chequetype WHERE chequeNumber = " + STR( VAL( chequeNumber ) ) + " AND transtype IN ( 1, 11, 12, 2 )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- ПРОДАЖА/##CHR(13)##//##CHR(10)##/ IF ( tranzType == "1" OR tranzType == "11" OR tranzType == "2" OR tranzType == "12" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCodePredefined = IIF( chequeType <> "6" AND chequeType <> "14" AND chequeType <> "15" AND chequeType <> "16" AND chequeType <> "18", "008", "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ОПРЕДЕЛЯТЬТИПДОКУМЕНТАПОФОРМЕОБМЕНА )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ docCode = IIF( !ПУСТО( docCodePredefined ), docCodePredefined, /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''18'', "046",/##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ2, dockIndCode ) > 0, "007", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ3, dockIndCode ) > 0, "001", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ4, dockIndCode ) > 0, "002", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ5, dockIndCode ) > 0, "003", /##CHR(13)##//##CHR(10)##/ IIF( AT( КОДФРОНТ6, dockIndCode ) > 0, "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''14'' OR chequeType == ''15'', "019", /##CHR(13)##//##CHR(10)##/ IIF( chequeType == ''16'', "007", "008" )))))))));/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //инвентаризация/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ2 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ2, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "007"; /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //приходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ3 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ3, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "001";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //расходная накладная/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ4 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ4, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "002";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //списание, оприходование/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ5 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ5, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "003";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //внутреннее перемещение/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( КОДФРОНТ6 ) AND EQUIPMENT.ККМ_ПроверитьКодДокумента( КОДФРОНТ6, dockIndCode ) ) /##CHR(13)##//##CHR(10)##/ docCode = "019";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если не определили по кодам документов, то ставим тип "ДКС"/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( docCode ) )/##CHR(13)##//##CHR(10)##/ docCode = "008";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем строки из документа, отличного от ДКС, то разделим их по номерам документов/##CHR(13)##//##CHR(10)##/ IF ( docCode <> "008" )/##CHR(13)##//##CHR(10)##/ docid = chequeNumber;/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ docid = 0;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ nnname = IIF( docCode <> "008", "Операция по свободной цене", "Свободная продажа");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Пытаемся сопоставить товар с выбранными разрезами/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Определяем код головного товара/##CHR(13)##//##CHR(10)##/ warecode = ЗАПРОС("SELECT code FROM sprres WHERE ISNULL(LTRIM(RTRIM(maincode)), '''')=''" + wareCode + "''");/##CHR(13)##//##CHR(10)##/ aspCond1 = IIF( !EMPTY( AspectValue1 ) AND AspectValue1 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 1 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue1 + ")", "");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ aspCond2 = IIF( !EMPTY( AspectValue2 ) AND AspectValue2 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 2 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue2 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond3 = IIF( !EMPTY( AspectValue3 ) AND AspectValue3 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 3 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue3 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond4 = IIF( !EMPTY( AspectValue4 ) AND AspectValue4 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 4 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue4 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ aspCond5 = IIF( !EMPTY( AspectValue5 ) AND AspectValue5 <> "999999999",/##CHR(13)##//##CHR(10)##/ " AND EXISTS(SELECT * FROM sprres_gdlist /##CHR(13)##//##CHR(10)##/ INNER JOIN specdimcomb /##CHR(13)##//##CHR(10)##/ ON specdimcomb.dimcode = sprres_gdlist.d_code /##CHR(13)##//##CHR(10)##/ WHERE specdimcomb.code = sprres.d_code AND sprres_gdlist.f_num = 5 AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint(SUBSTRING(specdimcomb.value_, 4, 10)) = " + AspectValue5 + ")", "");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ nn = ЗАПРОС("SELECT sprres.maincode /##CHR(13)##//##CHR(10)##/ FROM sprres /##CHR(13)##//##CHR(10)##/ WHERE sprres.subcode= ''" + warecode + "'' " + aspCond1 + aspCond2 + aspCond3 + aspCond4 + aspCond5);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ store_period = 0;/##CHR(13)##//##CHR(10)##/ //------ Если получилось установить код товара, то определяем остальные его параметры /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( nn ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем настоящий nn из sprnn по maincode/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT s.code, s.cat, s.name, s.ed, s.kodn, s.weight, s.d_litr, s.ed_weight, /##CHR(13)##//##CHR(10)##/ s.edd_litr, ISNULL( d.sklad, '''' ) AS sklad, ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprres s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.group_ = d.code /##CHR(13)##//##CHR(10)##/ WHERE ISNULL( LTRIM( RTRIM( maincode ) ), '''' ) = ''" + ALLTRIM( nn ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "001", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ s_code = IIF( ALLTRIM( ТОВАРИНФО.cat ) == "002", ТОВАРИНФО.code, "" );/##CHR(13)##//##CHR(10)##/ weight_lab = IIF( !EMPTY( ТОВАРИНФО.weight ), ALLTRIM( STR( ТОВАРИНФО.weight, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.ed_weight), "" );/##CHR(13)##//##CHR(10)##/ volume_lab = IIF( !EMPTY( ТОВАРИНФО.d_litr), ALLTRIM( STR( ТОВАРИНФО.d_litr, 10, 3 ) ) + " " + ALLTRIM( ТОВАРИНФО.edd_litr ), "" );/##CHR(13)##//##CHR(10)##/ weivol_lab = IIF( !EMPTY( weight_lab ), weight_lab, volume_lab );/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ) + IIF( !EMPTY( weivol_lab ), " " + weivol_lab, "" ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ЕСЛИ( docCode == "046", "шт", ТОВАРИНФО.ed );/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !БРАТЬСКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Если пытались разобрать разрезы и не нашли нужного товара/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( warecode ) AND !EMPTY( aspectslist ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //------ Достаем начальное значение имени и прочие реквизиты из заголовочного товара/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT s.name, s.ed, s.kodn, ISNULL( d.sklad, '''' ) AS sklad, /##CHR(13)##//##CHR(10)##/ ISNULL( d.firm, '''' ) AS firm,/##CHR(13)##//##CHR(10)##/ s.store_period/##CHR(13)##//##CHR(10)##/ FROM sprnn s /##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN sprres_g d ON s.nngroup = d.code /##CHR(13)##//##CHR(10)##/ WHERE nn = ''" + ALLTRIM( warecode ) + "''", "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "" ); // Чтобы контекст не мешал обращаться к переменным с тем же именем/##CHR(13)##//##CHR(10)##/ nn = "";/##CHR(13)##//##CHR(10)##/ s_code = "";/##CHR(13)##//##CHR(10)##/ nnname = IIF( !EMPTY( ТОВАРИНФО.name ), ALLTRIM( ТОВАРИНФО.name ), nnname );/##CHR(13)##//##CHR(10)##/ ed = ТОВАРИНФО.ed;/##CHR(13)##//##CHR(10)##/ kodn = ТОВАРИНФО.kodn;/##CHR(13)##//##CHR(10)##/ sklad = IIF( EMPTY( ТОВАРИНФО.sklad ) OR ( !БРАТЬСКЛАДЫИЗГРУПП && !f_sklfromwaregrp ), sklad, ТОВАРИНФО.sklad );/##CHR(13)##//##CHR(10)##/ firm = IIF( EMPTY( ТОВАРИНФО.firm ) OR !ФИРМЫИЗГРУПП, СПИСОКФР.firm, ТОВАРИНФО.firm );/##CHR(13)##//##CHR(10)##/ store_period = ТОВАРИНФО.store_period;/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ТОВАРИНФО" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //------- Пытаемся сформировать список разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст("SELECT sprres_gdlist.f_num, spranalit.sprcode /##CHR(13)##//##CHR(10)##/ FROM sprnn /##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_gdlist ON sprnn.nngroup = sprres_gdlist.code /##CHR(13)##//##CHR(10)##/ INNER JOIN sprdim ON sprres_gdlist.d_code = sprdim.code /##CHR(13)##//##CHR(10)##/ INNER JOIN spranalit ON spranalit.code = SUBSTRING(sprdim.type_, 16, 3) /##CHR(13)##//##CHR(10)##/ WHERE sprnn.nn= ''" + warecode + "'' ", "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ // Проходим по списку разрезов и формируем название/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СПИСОКРАЗРЕЗОВ" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ aspcode = IIF( f_num == 1, AspectValue1, IIF( f_num == 2, AspectValue2, IIF( f_num == 3, AspectValue3, /##CHR(13)##//##CHR(10)##/ IIF( f_num == 4, AspectValue4, IIF( f_num == 5, AspectValue5, "0" ) ) ) ) );/##CHR(13)##//##CHR(10)##/ aspname = ЗАПРОС( "SELECT name FROM sprmain WHERE scode= ''" + СПИСОКРАЗРЕЗОВ.sprcode + "'' AND /##CHR(13)##//##CHR(10)##/ dbo.fn_chartoint( code )= " + STR( VAL( aspcode ) ) );/##CHR(13)##//##CHR(10)##/ nnname = ALLTRIM( nnname ) + '' / '' + ALLTRIM( aspname );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СПИСОКРАЗРЕЗОВ" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем постановку на кран, то необходимо сформировать документ для отправки в ЧЗ/##CHR(13)##//##CHR(10)##/ IF ( VAL( chequeType ) == 27 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //если в транзакциях 11 не указаны дата и время, то берем из транзакции открытия чека/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzDate ) )/##CHR(13)##//##CHR(10)##/ tranzDate = tranzDateKeg;/##CHR(13)##//##CHR(10)##/ IF ( ПУСТО( tranzTime ) )/##CHR(13)##//##CHR(10)##/ tranzTime = tranzTimeKeg;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //проверим длину возвращаемого КМ (xPOS3 возвращает неполный КМ разливного пива)/##CHR(13)##//##CHR(10)##/ //если длина менее 25 символов, то дополним КМ требуемыми идентификаторами/##CHR(13)##//##CHR(10)##/ IF ( LEN( sgtin ) < 25 )/##CHR(13)##//##CHR(10)##/ sgtin = "01" + ПОДСТРОКА( sgtin, 1, 14 ) + "21" + ПОДСТРОКА( sgtin, 15, 7 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ КомментарийПостановки = "Касса """ + ALLTRIM( ИМЯОБОРУДОВАНИЯ ) + """ | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzCount ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzDate ) + " | " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( tranzTime ) + " | " + /##CHR(13)##//##CHR(10)##/ "док. № " + ALLTRIM( chequeNumber );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( store_period ) )/##CHR(13)##//##CHR(10)##/ expirationDate = ДОБАВИТЬДНИ( CTOD( tranzDate + " " + tranzTime ), store_period );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ expirationDate = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ __SQL()/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF NOT EXISTS( SELECT TOP 1 * FROM mark_reciept_spec spec/##CHR(13)##//##CHR(10)##/ INNER JOIN mark_reciept mark ON mark.identity_column = spec.ic/##CHR(13)##//##CHR(10)##/ WHERE CONVERT( varchar(150), spec.mark ) = ''[[ STDF( sgtin ) ]]'' AND mark.action = ''TAP'' AND mark.note = ''[[ КомментарийПостановки ]]'' )/##CHR(13)##//##CHR(10)##/ BEGIN/##CHR(13)##//##CHR(10)##/ EXEC sp_rmk_markdoc ''[[ firm ]]'', ''[[ nn ]]'', ''[[ КомментарийПостановки ]]'', ''[[ STDF( sgtin ) ]]'', [[ kolp ]], ''[[ expirationDate ]]'', ''beer''/##CHR(13)##//##CHR(10)##/ END /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SQLERROR/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Ошибка при записи документа ""Постановка на кран"" с номером " + /##CHR(13)##//##CHR(10)##/ chequeNumber + " от " + tranzDate + " " + tranzTime + CHR(13) + CHR(10) +/##CHR(13)##//##CHR(10)##/ "Описание ошибки: " + _ERRORDESCRIPTION, "Загрузка Постановки на кран" ); /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //обнуляем дату и время операции постановки на кран/##CHR(13)##//##CHR(10)##/ tranzDateKeg = "";/##CHR(13)##//##CHR(10)##/ tranzTimeKeg = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ sklad_d = "";/##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ IF ( docCode == "019" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ sklad_d = sklad;/##CHR(13)##//##CHR(10)##/ sklad = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //если загружаем операцию постановки на кран (27) или снятия с крана (28), то пропускаем их загрузку в таблицу/##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( VAL( chequeType ), 27, 28 ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь добавляем запись в таблицу ИМЯТАБЛИЦЫ/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "INSERT INTO " + ИМЯТАБЛИЦЫ + "(id, date, transtype, posnumber, doccode, seller, waremark, chequeNumber, chequetype, /##CHR(13)##//##CHR(10)##/ ecrsession, infostr, ecrnumber, ndok, docid, note, inouttype, nn, s_code, nnname, ed, /##CHR(13)##//##CHR(10)##/ kodn, client, contract, kolp, barcode, gtd, ksnum, summasale, summabn, summa, cena, /##CHR(13)##//##CHR(10)##/ firm, sklad, mol, sklad_d, mol_d, kskod, fr_code, manager, warecode, aspectvalue1 )/##CHR(13)##//##CHR(10)##/ VALUES ( /##CHR(13)##//##CHR(10)##/ " + STR( tranzCount ) + ", ''" + TTOC( date ) + "'', " + tranzType + ", " + STR( posNumber ) + ", ''" + doccode + "'',/##CHR(13)##//##CHR(10)##/ " + seller + ", ''" + STDF( wareMark, 250 ) + "'', " + chequeNumber + ", " + chequeType + ", " + STR( VAL( ecrSession ) ) + ", ''" + karta + "'',/##CHR(13)##//##CHR(10)##/ " + ecrNumber + ", ''" + universalNDOK + "'', 0, '''', '''', ''" + nn + "'', ''" + s_code + "'', ''" + STDF( nnname, 250 ) + "'',/##CHR(13)##//##CHR(10)##/ ''" + ed + "'', ''" + kodn + "'', ''" + client + "'', '''', " + STR( kolp, 16, 3 ) + ", ''" + STDF( barcode ) + "'', '''', /##CHR(13)##//##CHR(10)##/ " + STR( VAL( ecrSession ) ) + ", " + STR( summasale, 16, 3 ) + ", " + STR( summabn, 16 ,3 ) + ", " + STR( summa, 16 ,3 ) + ",/##CHR(13)##//##CHR(10)##/ " + STR( cena, 16 ,3 ) + ", ''" + firm + "'', ''" + sklad + "'', '''', '''', '''', ''" + kskod + "'', " + ecrNumber + ", ''" + manager + "'',/##CHR(13)##//##CHR(10)##/ ''" + warecode_org + "'', " + STR( VAL( AspectValue1 ) ) + " )" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ foundTranz = true;/##CHR(13)##//##CHR(10)##/ processCount++;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если указана конкретная дата для создания документов, то используем ее/##CHR(13)##//##CHR(10)##///IF ( ИСТОЧНИКДАТЫ == 2 )/##CHR(13)##//##CHR(10)##/// ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET date = ''" + TTOC( ДАТАДОКУМЕНТОВ ) + "''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///------- Если выбран вариант загрузки по дате закрытия смены, /##CHR(13)##//##CHR(10)##///------- и в списке транзакций остались транзакции без z_date, то /##CHR(13)##//##CHR(10)##///------- таким транзакциям проставляем текущую дату. Иначе, будет создано много документов/##CHR(13)##//##CHR(10)##/IF ( ИСТОЧНИКДАТЫ == 3 OR ИСТОЧНИКДАТЫ == 4 )/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ИМЯТАБЛИЦЫ + " SET z_date = ''" + TTOC( ДатаВремя( ) ) + "'' WHERE z_date= ''''" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/Индикатор( );/##CHR(13)##//##CHR(10)##/СистемноеСообщение( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Закрываем файл, удаляем последний контекст и убираем лишние окна/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокФР" );/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/// Ждем секунду, чтобы файл действительно закрылся. /##CHR(13)##//##CHR(10)##/Ожидание( 1000 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/ ФайлПереименовать( ИмяФайла, ИмяФайла + STRTRAN( STRTRAN( STRTRAN( TTOC( ДатаВремя( ), 7 ), ".","" ), ":", "" ), " ", "" ) + ".bak" );/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ФАЙЛУДАЛИТЬ( ИмяФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !БылиТранзакцииПоФРВыбранномуВТО ) MessageBox("В файле не обнаружены транзакции по ФР, указанным в карточке ТО");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',248.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_flag_in_alter = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "'' AND path_in_alter <> ''''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_flag_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = path_flag_in_alter;/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕСЛИ( !РучнойОбмен, ИмяФайлаФлага, "" );',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',200.00000000,'//Инициализация ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',249.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',270.00000000,'//Текст ошибки драйвера ККМ. /##CHR(13)##//##CHR(10)##///Обработка должна вернуть строку, содержащую описание последней возникшей ошибки при работе с ККМ./##CHR(13)##//##CHR(10)##/RETURN _ТЕКСТОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',271.00000000,'//Последняя ошибка драйвера ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое - код последней ошибки драйвера ККМ./##CHR(13)##//##CHR(10)##/RETURN _КОДОШИБКИ;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',272.00000000,'//Признак наличия ошибки ККМ./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если в результате выполнения последней операции с ККМ возникла ошибка. Иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN !EMPTY( _КОДОШИБКИ );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',207.00000000,'//Подготовка к выгрузке товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',208.00000000,'//Выгрузка всех товаров в ККМ./##CHR(13)##//##CHR(10)##/СтавкаБезНДС = ЗАПРОС( "SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM sprlistkodn /##CHR(13)##//##CHR(10)##/ WHERE code = ( SELECT TOP 1 code /##CHR(13)##//##CHR(10)##/ FROM speclistkodn /##CHR(13)##//##CHR(10)##/ WHERE list = ( SELECT TOP 1 code FROM/##CHR(13)##//##CHR(10)##/ sprkodn /##CHR(13)##//##CHR(10)##/ WHERE ntype = '''' ) )");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КодФирмыОборудования = ЗАПРОС("SELECT firm FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''");/##CHR(13)##//##CHR(10)##///если заполнена фирма в оборудовании, то определяем признак не плательщика НДС из выбранной фирмы/##CHR(13)##//##CHR(10)##///иначе берем выбранныю фирму в группе ресурсов/##CHR(13)##//##CHR(10)##/ЧастьЗапросаФирмаБезНДС = "";/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( КодФирмыОборудования ) )/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = ''" + КодФирмыОборудования + "'' ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = temp.firm ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///если в группе ресурсов не указана фирма, а указан код ФР и заполнен список фирм в оборудовании, то второй запрос поменять на/##CHR(13)##//##CHR(10)##///ЧастьЗапросаФирмаБезНДС = ", (SELECT TOP 1 fwonds FROM sprfirm WHERE code = (SELECT TOP 1 firm FROM " + СПИСОКФР + " WHERE fr_code = temp.nkkm ) ) AS firm_fwonds";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса = "";/##CHR(13)##//##CHR(10)##/ЧастьЗапросаРеквизитовАгента = "";/##CHR(13)##//##CHR(10)##/mAgentDetailsCode = "";/##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента = ", sprres.f_agentware AS sprres_f_agentware, sprres.vendor AS sprres_vendor "/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ("Подготовка к формированию файла выгрузки");/##CHR(13)##//##CHR(10)##/ТекстЗапроса = "SELECT temp.*, /##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnnname( sprres.code ) ELSE sprres.name END AS sprres_name,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_fullnncname( sprres.code ) ELSE sprres.shortname END AS sprres_shortname, /##CHR(13)##//##CHR(10)##/ sprres.nnvid AS sprres_nnvid, /##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS sprres_alcotype, /##CHR(13)##//##CHR(10)##/ ISNULL( (SELECT MAX( d_litr ) FROM sprres_egais WHERE code = sprres.code), 0 ) AS spregais_d_litr, /##CHR(13)##//##CHR(10)##/ sprres.d_litr AS sprres_d_litr, /##CHR(13)##//##CHR(10)##/ sprres.a_proc AS sprres_a_proc, /##CHR(13)##//##CHR(10)##/ sprres.ed AS sprres_ed, /##CHR(13)##//##CHR(10)##/ (SELECT ffdcode FROM spredn WHERE code = sprres.ed) AS ffdcode, /##CHR(13)##//##CHR(10)##/ (SELECT f_volume FROM spredn WHERE code = sprres.ed) AS ed_f_volume, /##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.rsubject, '''' ) AS spr_rsubject, /##CHR(13)##//##CHR(10)##/ ISNULL( sprres_g.paytype, '''' ) AS spr_paytype, /##CHR(13)##//##CHR(10)##/ sprres.f_make AS sprres_f_make, /##CHR(13)##//##CHR(10)##/ sprres.cat AS sprres_cat, /##CHR(13)##//##CHR(10)##/ sprres.markgroup AS sprres_markgroup, /##CHR(13)##//##CHR(10)##/ sprres.f_mark AS sprres_f_mark, /##CHR(13)##//##CHR(10)##/ sprres.f_marknotrequire AS sprres_f_marknotrequire, /##CHR(13)##//##CHR(10)##/ sprres.f_draft AS sprres_f_draft,/##CHR(13)##//##CHR(10)##/ sprres.gtin AS sprres_gtin, /##CHR(13)##//##CHR(10)##/ sprres.enterprice AS sprres_enterprice,/##CHR(13)##//##CHR(10)##/ ISNULL( dbo.fn_getint_ex(''SPR'', ''S02'', ''ФронтолБезВводаКоличества'', sprres.code, '''', '''', '''' ), 0 ) AS noenterquantity,/##CHR(13)##//##CHR(10)##/ (SELECT TOP 1 fr_code FROM " + СПИСОКФР + " WHERE firm = temp.firm) AS tovar_firm " +/##CHR(13)##//##CHR(10)##/ ЧастьЗапросаФирмаБезНДС + /##CHR(13)##//##CHR(10)##/ ЧастьЗапросаРеквизитовАгента;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/kodGrPintChek = "";/##CHR(13)##//##CHR(10)##/kodGrPintCopy = "";/##CHR(13)##//##CHR(10)##/kodGrPintInvoice = "";/##CHR(13)##//##CHR(10)##/kodGrPintMark = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиЧека'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintChek,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиКопии'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintCopy,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиСчета'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintInvoice,/##CHR(13)##//##CHR(10)##/ CASE WHEN sprres.cat = ''001'' THEN dbo.fn_getchar_ex ( ''SPR'', ''S02'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT)/##CHR(13)##//##CHR(10)##/ ELSE dbo.fn_getchar_ex ( ''SPR'', ''S05'', ''КодГруппыПечатиМарки'', temp.nn, DEFAULT, DEFAULT, DEFAULT) END AS kodGrPintMark "; /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/vizualmodif = "";/##CHR(13)##//##CHR(10)##/ЛеваяГраница = "";/##CHR(13)##//##CHR(10)##/ПраваяГраница = "";/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬМОДИФИКАТОРЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ТекстЗапроса += ", dbo.fn_getint_ex( ''SPR'', ''S02'', ''ВизуальныйВыборМодификаторов'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS vizualmodif,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ЛеваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ЛеваяГраница,/##CHR(13)##//##CHR(10)##/ dbo.fn_getint_ex( ''SPR'', ''S02'', ''ПраваяГраницаМодификатора'', temp.nn, DEFAULT, DEFAULT, DEFAULT) AS ПраваяГраница ";/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ТекстЗапроса += " FROM " + ТОВАРЫ + " temp /##CHR(13)##//##CHR(10)##/INNER JOIN sprres sprres ON temp.code = sprres.maincode /##CHR(13)##//##CHR(10)##/LEFT OUTER JOIN sprres_g sprres_g ON sprres.group_ = sprres_g.code";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ДОБАВИТЬКОНТЕКСТ(ТекстЗапроса,"СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВЫБРАТЬКОНТЕКСТ( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/КоличествоСтрокОбщее = КоличествоСтрок("СписокТоваров");/##CHR(13)##//##CHR(10)##/Индикатор("Выгрузка товаров",КоличествоСтрокОбщее);/##CHR(13)##//##CHR(10)##/КоличествоСтрок=0;/##CHR(13)##//##CHR(10)##/ПЕРЕЙТИВНАЧАЛО("СписокТоваров");/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ( "Формирование файла выгрузки");/##CHR(13)##//##CHR(10)##/WHILE ( !КОНЕЦКОНТЕКСТА( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //СИСТЕМНОЕСООБЩЕНИЕ( "Пожалуйста, подождите.");/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ КоличествоСтрок++;/##CHR(13)##//##CHR(10)##/ if ( КоличествоСтрок % 10 == 0 ) Индикатор( КоличествоСтрок, " Выгрузка товаров. Обработка " + Alltrim(КоличествоСтрок) + " из " + ALLTRIM(КоличествоСтрокОбщее) );/##CHR(13)##//##CHR(10)##/ //индикатор/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если указано выгружать только разрезы, без самих карточек, то пропускаем карточки разрезов/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 AND СписокТоваров.f_subres )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем код ФР, который должен использоваться с товаром/##CHR(13)##//##CHR(10)##/ // Если в группе ресурсов указан конкретный код - берем его/##CHR(13)##//##CHR(10)##/ // Иначе, берем фирму и по ней ищем код ФР в l_frlist/##CHR(13)##//##CHR(10)##/ mFr_code = ЕСЛИ( VAL( nkkm ) != 0, nkkm, СписокТоваров.tovar_firm ); // Фронтол 5.9 перестал понимать 22-е поле адекватно. Теперь оно выгружается как код группы печати чека, если не указано иное/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ mBarcode = ""; //ALLTRIM( СписокТоваров.barcode ); ШК выгрузятся в разделе ШК. Здесь они могут помешать, например для весового товара/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ rsubject = STR( VAL( СписокТоваров.spr_rsubject ) );/##CHR(13)##//##CHR(10)##/ mPaytype = "2";/##CHR(13)##//##CHR(10)##/ IF ( VAL( СписокТоваров.spr_paytype ) == 1 OR VAL( СписокТоваров.spr_paytype ) == 2 )/##CHR(13)##//##CHR(10)##/ mPaytype = STR( VAL( СписокТоваров.spr_paytype ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mName = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( name ), sprres_name ), 100 );/##CHR(13)##//##CHR(10)##/ mCname = LEFT( ЕСЛИ( IN_PARAM_NAME_WEIGHT == 0, ALLTRIM( cname ), sprres_shortname ), 100 ); // Краткое наименование используется для чека/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокТоваров.sprres_alcotype ) == 1;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = VAL( СписокТоваров.sprres_alcotype ) == 2;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ВСПИСКЕ( СписокТоваров.sprres_nnvid, "481" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = false;/##CHR(13)##//##CHR(10)##/ ПивнаяПродукция = false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокТоваров.sprres_ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mNNVid = СписокТоваров.sprres_nnvid;/##CHR(13)##//##CHR(10)##/ mVolume = STR( ЕСЛИ( VAL( СписокТоваров.spregais_d_litr ) != 0, СписокТоваров.spregais_d_litr, СписокТоваров.sprres_d_litr ), 10, 6 );/##CHR(13)##//##CHR(10)##/ mAProc = STR( СписокТоваров.sprres_a_proc, 10, 2 );/##CHR(13)##//##CHR(10)##/ mEnterPrice = СписокТоваров.sprres_enterprice;/##CHR(13)##//##CHR(10)##/ mNoEnterquantity = СписокТоваров.noenterquantity;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //значение по умолчанию - обычный товар/##CHR(13)##//##CHR(10)##/ mF_marknotrequire = "1";/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_mark )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //Код группы маркируемого товара:/##CHR(13)##//##CHR(10)##/ //0005 - табачная продукция, /##CHR(13)##//##CHR(10)##/ //1520 - обувь, /##CHR(13)##//##CHR(10)##/ //0002 - изделия из меха, /##CHR(13)##//##CHR(10)##/ //0003 - лекарственные препараты, /##CHR(13)##//##CHR(10)##/ //9999 - прочая, /##CHR(13)##//##CHR(10)##/ //9998 - легпром, /##CHR(13)##//##CHR(10)##/ //9997 - шины, /##CHR(13)##//##CHR(10)##/ //9996 - фото, /##CHR(13)##//##CHR(10)##/ //9995 - духи и парфюм, /##CHR(13)##//##CHR(10)##/ //9994 - альтернативный табак, /##CHR(13)##//##CHR(10)##/ //9993 - молочная продукция, /##CHR(13)##//##CHR(10)##/ //9992 - вода/##CHR(13)##//##CHR(10)##/ //9991 - ювелирная продукция/##CHR(13)##//##CHR(10)##/ //9990 - никотинсодержащая продукция/##CHR(13)##//##CHR(10)##/ //9989 - пиво и пивные напитки/##CHR(13)##//##CHR(10)##/ //Все то что отмечено флагом "Маркированный", но со значением отличным от перечисленных, выгружается как значение 7 - прочая маркировка/##CHR(13)##//##CHR(10)##/ //в xPOS3 есть не все типы маркировки/##CHR(13)##//##CHR(10)##/ mMarkGroup = ЕСЛИ( СписокТоваров.sprres_markgroup == "0002", 2, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0003", 3, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "0005", 4, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "1520", 5, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9999", 7, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9998", 11, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9997", 10, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9996", 8, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9995", 9, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9994", 12, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9993", 13, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9991", 14, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9992", 15, /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокТоваров.sprres_markgroup == "9990", 16, 7 ) ) ) ) ) ) ) ) ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mF_marknotrequire = ЕСЛИ( СписокТоваров.sprres_f_marknotrequire, "1", "0");/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //для крепкого алкоголя и пива устанавливаем свои признаки /##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 1; //алкогольная продукция/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 1 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 18; //разливное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_mark AND СписокТоваров.sprres_markgroup == "9989" AND СписокТоваров.sprres_f_draft == 0 )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 17; //фасованное пиво/##CHR(13)##//##CHR(10)##/ ELSE IF ( ПивнаяПродукция )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //обычный товар/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( mAlco )/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_f_make ) /##CHR(13)##//##CHR(10)##/ rsubject = "5";/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.sprres_cat == "002" )/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( rsubject ) == 2 ) //подакцизный товар/##CHR(13)##//##CHR(10)##/ rsubject = "2";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 3 ) //работа/##CHR(13)##//##CHR(10)##/ rsubject = "3";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 4 ) //услуга/##CHR(13)##//##CHR(10)##/ rsubject = "4";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 13 ) //иной предмет расчета/##CHR(13)##//##CHR(10)##/ rsubject = "6";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 10 ) //платеж/##CHR(13)##//##CHR(10)##/ rsubject = "7"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 11 ) //агентское вознаграждение/##CHR(13)##//##CHR(10)##/ rsubject = "8"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 7 ) //лотерейный билет/##CHR(13)##//##CHR(10)##/ rsubject = "9"; /##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 9 ) //результаты интеллектуальной деятельности/##CHR(13)##//##CHR(10)##/ rsubject = "10";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 12 ) //выплата/##CHR(13)##//##CHR(10)##/ rsubject = "11";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 18 ) //курортный сбор/##CHR(13)##//##CHR(10)##/ rsubject = "12";/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL( rsubject ) == 27 ) //выдача денежных средств/##CHR(13)##//##CHR(10)##/ rsubject = "13";/##CHR(13)##//##CHR(10)##/ ELSE /##CHR(13)##//##CHR(10)##/ rsubject = "1"; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.sprres_f_agentware == true AND !ПУСТО(СписокТоваров.sprres_vendor) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAgentDetailsCode = VAL(СписокТоваров.sprres_vendor);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СписокТоваров.ffdcode))/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокТоваров.ffdcode == 0 )/##CHR(13)##//##CHR(10)##/ mffdcode = 0;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 10 )/##CHR(13)##//##CHR(10)##/ mffdcode = 1;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 11 )/##CHR(13)##//##CHR(10)##/ mffdcode = 2; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 12 )/##CHR(13)##//##CHR(10)##/ mffdcode = 3;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 20 )/##CHR(13)##//##CHR(10)##/ mffdcode = 4; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 21 )/##CHR(13)##//##CHR(10)##/ mffdcode = 5;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 22 )/##CHR(13)##//##CHR(10)##/ mffdcode = 6;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 30 )/##CHR(13)##//##CHR(10)##/ mffdcode = 7;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 31 )/##CHR(13)##//##CHR(10)##/ mffdcode = 8;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 32 )/##CHR(13)##//##CHR(10)##/ mffdcode = 9;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 40 )/##CHR(13)##//##CHR(10)##/ mffdcode = 10; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 41 )/##CHR(13)##//##CHR(10)##/ mffdcode = 11; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 42 )/##CHR(13)##//##CHR(10)##/ mffdcode = 12;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 50 )/##CHR(13)##//##CHR(10)##/ mffdcode = 13;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 51 )/##CHR(13)##//##CHR(10)##/ mffdcode = 14; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 70 )/##CHR(13)##//##CHR(10)##/ mffdcode = 15; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 71 )/##CHR(13)##//##CHR(10)##/ mffdcode = 16; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 72 )/##CHR(13)##//##CHR(10)##/ mffdcode = 17; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 73 )/##CHR(13)##//##CHR(10)##/ mffdcode = 18;/##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 80 )/##CHR(13)##//##CHR(10)##/ mffdcode = 19; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 81 )/##CHR(13)##//##CHR(10)##/ mffdcode = 20; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 82 )/##CHR(13)##//##CHR(10)##/ mffdcode = 21; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 83 )/##CHR(13)##//##CHR(10)##/ mffdcode = 22; /##CHR(13)##//##CHR(10)##/ ELSE IF ( СписокТоваров.ffdcode == 255 )/##CHR(13)##//##CHR(10)##/ mffdcode = 23; /##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mCena = ALLTRIM( STR( СписокТоваров.cena, 8, 2 ) );/##CHR(13)##//##CHR(10)##/ //------ Обрабатываем товары, у которых не нулевая цена./##CHR(13)##//##CHR(10)##/ //------ Если указано грузить все, то грузим с любой ценой/##CHR(13)##//##CHR(10)##/ //------ Если товар заголовочный (есть разререзы), то цена тоже не важна/##CHR(13)##//##CHR(10)##/ IF ( !ТОВАРЫБЕЗЦЕНЫ AND VAL( mCena ) <= 0 AND !f_hchild )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/ CONTINUE;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mMin_cena = IIF( !EMPTY( min_cena ), ALLTRIM( STR( min_cena, 8, 2 ) ), "");/##CHR(13)##//##CHR(10)##/ // Расчитываем срок хранения/##CHR(13)##//##CHR(10)##/ mStore_period = IIF( store_period <> 0, ALLTRIM( DTOC( store_period + DATE( ) ) ), "" );/##CHR(13)##//##CHR(10)##/ // Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_sch = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", STR( VAL( nngroup ) ) );/##CHR(13)##//##CHR(10)##/ // Вариант использования разрезов: 0 — полный список; 1 — заданный список; 2 — заданный список с остатком/##CHR(13)##//##CHR(10)##/ mAspect_var = IIF( EMPTY( nngroup ) OR !f_razr OR aspecttype == 1 OR !f_hchild, "0", IIF( saldotype > 0, "2", "1" ) );/##CHR(13)##//##CHR(10)##/ // Код родительской группы/##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( IIF( parent == 0, "", STR( ABS( parent ) + IIF( parent < 0, 2000000000, 1000000000 ) ) ) );/##CHR(13)##//##CHR(10)##/ // Код налога/##CHR(13)##//##CHR(10)##/ mKodn = IIF( f_nalogs, ALLTRIM( STR( VAL( kodn ) ) ), "" );/##CHR(13)##//##CHR(10)##/ //если в карточке фирмы установлен флаг "Не является плательщиком НДС", то выгружаем ставку БезНДС для товара/##CHR(13)##//##CHR(10)##/ IF ( f_nalogs AND firm_fwonds )/##CHR(13)##//##CHR(10)##/ mKodn = ALLTRIM( STR( VAL( СтавкаБезНДС ) ) );/##CHR(13)##//##CHR(10)##/ // Артикул/##CHR(13)##//##CHR(10)##/ mArticle = LEFT( ALLTRIM( article ), 20 );/##CHR(13)##//##CHR(10)##/ // Путь к картинке/##CHR(13)##//##CHR(10)##/ mImage_path = ALLTRIM( image_path );/##CHR(13)##//##CHR(10)##/ mNote = STDE( note );/##CHR(13)##//##CHR(10)##/ mKkm_section = ALLTRIM( STR( VAL( kkm_section ) ) );/##CHR(13)##//##CHR(10)##/ // Принтер для печати чеков/##CHR(13)##//##CHR(10)##/ mCheckPrinter = ALLTRIM( checkPrinter );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mFlags = IIF( fractqty OR waretype == 0 OR РазливнойАлко, "1", "0") + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "1" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "1" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ mNoEnterquantity + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ ЕСЛИ( mEnterPrice, "1", "0" ) + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ IIF( enterqty OR РазливнойАлко, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ ","; //11. скидки/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ mFlagsV = ЕСЛИ( fractqty OR waretype == 0, "1", "0") + "," + //1. дробное количество (весовой)/##CHR(13)##//##CHR(10)##/ "0" + "," + //2. продажа/##CHR(13)##//##CHR(10)##/ "0" + "," + //3. возврат/##CHR(13)##//##CHR(10)##/ "1" + "," + //4. отрицательные остатки/##CHR(13)##//##CHR(10)##/ "1" + "," + //5. без ввода количества/##CHR(13)##//##CHR(10)##/ "1" + "," + //6. списание остатков/##CHR(13)##//##CHR(10)##/ "1" + "," + //7. редактирование цены/##CHR(13)##//##CHR(10)##/ ЕСЛИ( enterqty, "1", "0" ) + "," + //8. ввод количества вручную/##CHR(13)##//##CHR(10)##/ "," + //9. печатать в чеке/##CHR(13)##//##CHR(10)##/ "," + //10. наливаемый товар/##CHR(13)##//##CHR(10)##/ ","; //11. скидки/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mActionPriz = IIF( f_action == 0, IIF( maxdiscount == -1, "", ALLTRIM( STR( maxdiscount, 16, 2 ) ) ), "0");/##CHR(13)##//##CHR(10)##/ // Остаток и PLU/##CHR(13)##//##CHR(10)##/ mTmcSaldo = ALLTRIM( STR( kolp, 10, 3 ) );/##CHR(13)##//##CHR(10)##/ mPlu = ALLTRIM( plu );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mDsc_value = "";/##CHR(13)##//##CHR(10)##/ mVtype = "";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Если у товара указан код скидки, то надо вычислить ее значение/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( discount ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Если надо вычислить значение скидки, то вычисляем ее/##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( value );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Вычисляем и подставляем Коды Групп печати/##CHR(13)##//##CHR(10)##/ IF ( !_ВЫГРУЖАТЬГРУППЫПЕЧАТИ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( mFr_code ) != 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ kodGrPintChek = mFr_code;/##CHR(13)##//##CHR(10)##/ kodGrPintCopy = mFr_code;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка = mCode + ";" + //1. код/##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2. Штрихкоды через запятую (максимальная длина штрихкода не превышает 40 символов)/##CHR(13)##//##CHR(10)##/ STDE( mName, 128 ) + ";" + //3. Наименование/##CHR(13)##//##CHR(10)##/ STDE( mCname, 128 ) + ";" + //4. Текст для чека/##CHR(13)##//##CHR(10)##/ mCena + ";" + //5. Цена/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6. Остаток/##CHR(13)##//##CHR(10)##/ ";" + //7. Не используется/##CHR(13)##//##CHR(10)##/ mFlags + ";" + //8. флаги контроля/##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9. Минимальная цена/##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10. Не используется/##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11. Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12. Вариант использования разрезов/##CHR(13)##//##CHR(10)##/ rsubject + ";" + //13. Признак предмета расчета/##CHR(13)##//##CHR(10)##/ ";" + //14. Коэффициент штрихкода/##CHR(13)##//##CHR(10)##/ ";" + //15. Не используется/##CHR(13)##//##CHR(10)##/ mParent + ";" + //16. Код родительской группы/##CHR(13)##//##CHR(10)##/ "1" + ";" + //17. Товар или группа: для товара 1, для группы 0/##CHR(13)##//##CHR(10)##/ ";" + //18. Не используется/##CHR(13)##//##CHR(10)##/ "0" + ";" + //19. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //20. Серия/##CHR(13)##//##CHR(10)##/ ";" + //21. Сертификат/##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22. Не используется/##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23. Код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. Не используется/##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25. Не используется/##CHR(13)##//##CHR(10)##/ mArticle + ";" + //26. Артикул/##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27. Не используется/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28. Не используется/##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29. Максимальная скидка, %/##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30. Не используется/##CHR(13)##//##CHR(10)##/ mImage_path +";" + //31. Имя файла с картинкой формата PNG, BMP, JPEG, GIF, TIFF, ICO и путь к нему/##CHR(13)##//##CHR(10)##/ mNote + ";" + //32. Описание/##CHR(13)##//##CHR(10)##/ ";" + //33. Кратность количества/##CHR(13)##//##CHR(10)##/ "0" + ";" + //34. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //35. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //36. Не используется/##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //38. Не используется/##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39. Код ГП товара/##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40. Код ГП копии товара/##CHR(13)##//##CHR(10)##/ ";" + //41. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //42. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //43. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //44. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //45. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //46. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //47. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //48. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //49. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //50. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //51. Не используется/##CHR(13)##//##CHR(10)##/ mF_marknotrequire + ";"; //52. Значение флага «Без ввода ШК маркировки»/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( ( mAlco OR ПивнаяПродукция ) AND !РазливнойАлко )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += mNNVid + ";" + //53. Код вида продукции/##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54. Емкость тары, л./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55. Тип номенклатуры/##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56. Маркировка алкогольной продукции/##CHR(13)##//##CHR(10)##/ mAProc + ";"; //57. Крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/ mMarkGroup = 0; //Обычный товар/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка += ";" + //53. Код вида продукции/##CHR(13)##//##CHR(10)##/ ";" + //54. Емкость тары, л./##CHR(13)##//##CHR(10)##/ mMarkGroup + ";" + //55. Тип номенклатуры/##CHR(13)##//##CHR(10)##/ ";" + //56. Маркировка алкогольной продукции/##CHR(13)##//##CHR(10)##/ ";"; //57. Крепость алкогольной продукции/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ Строка += mPaytype + ";" + //58. Признак способа расчета/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" + //59. Код реквизитов агента/##CHR(13)##//##CHR(10)##/ ";" + //60. Сумма акциза, включенная в стоимость товара/##CHR(13)##//##CHR(10)##/ ";" + //61. Код страны происхождения товара (допустимы только цифры)/##CHR(13)##//##CHR(10)##/ ";" + //62. Номер таможенной декларации/##CHR(13)##//##CHR(10)##/ ";" + //63. Наименование лотереи/##CHR(13)##//##CHR(10)##/ ";" + //64. Код вида номенклатурной классификации (EAN-13)/##CHR(13)##//##CHR(10)##/ ";" + //65. Проверка соответствия товара штрихкоду маркировки: 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ mffdcode; //66. Мера количества предмета расчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если разливной алкоголь, то добавляем еще одну строку с кодом + 90000000/##CHR(13)##//##CHR(10)##/ IF ( РазливнойАлко )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mffdcode = 11; //литр/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = STR( VAL( mCode ) + 90000000 ) + ";" + //1. код/##CHR(13)##//##CHR(10)##/ mBarcode + ";" + //2. Штрихкоды через запятую (максимальная длина штрихкода не превышает 40 символов)/##CHR(13)##//##CHR(10)##/ STDE( "ВТ " + mName, 128 ) + ";" + //3. Наименование/##CHR(13)##//##CHR(10)##/ STDE( "ВТ " + mCname, 128 ) + ";" + //4. Текст для чека/##CHR(13)##//##CHR(10)##/ mCena + ";" + //5. Цена/##CHR(13)##//##CHR(10)##/ mTmcSaldo + ";" + //6. Остаток/##CHR(13)##//##CHR(10)##/ ";" + //7. Не используется/##CHR(13)##//##CHR(10)##/ mFlagsV + ";" + //8. флаги контроля/##CHR(13)##//##CHR(10)##/ mMin_cena + ";" + //9. Минимальная цена/##CHR(13)##//##CHR(10)##/ mStore_period + ";" + //10. Не используется/##CHR(13)##//##CHR(10)##/ mAspect_sch + ";" + //11. Код схемы разрезов/##CHR(13)##//##CHR(10)##/ mAspect_var + ";" + //12. Вариант использования разрезов/##CHR(13)##//##CHR(10)##/ rsubject + ";" + //13. Признак предмета расчета/##CHR(13)##//##CHR(10)##/ ";" + //14. Коэффициент штрихкода/##CHR(13)##//##CHR(10)##/ ";" + //15. Не используется/##CHR(13)##//##CHR(10)##/ mParent + ";" + //16. Код родительской группы/##CHR(13)##//##CHR(10)##/ "1" + ";" + //17. Товар или группа: для товара 1, для группы 0/##CHR(13)##//##CHR(10)##/ ";" + //18. Не используется/##CHR(13)##//##CHR(10)##/ "0" + ";" + //19. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //20. Серия/##CHR(13)##//##CHR(10)##/ ";" + //21. Сертификат/##CHR(13)##//##CHR(10)##/ mFr_code + ";" + //22. Не используется/##CHR(13)##//##CHR(10)##/ mKodn + ";" + //23. Код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. Не используется/##CHR(13)##//##CHR(10)##/ mPlu + ";" + //25. Не используется/##CHR(13)##//##CHR(10)##/ mArticle + ";" + //26. Артикул/##CHR(13)##//##CHR(10)##/ mVtype + ";" + //27. Не используется/##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + //28. Не используется/##CHR(13)##//##CHR(10)##/ mActionPriz + ";" + //29. Максимальная скидка, %/##CHR(13)##//##CHR(10)##/ mCheckPrinter + ";" + //30. Не используется/##CHR(13)##//##CHR(10)##/ mImage_path +";" + //31. Имя файла с картинкой формата PNG, BMP, JPEG, GIF, TIFF, ICO и путь к нему/##CHR(13)##//##CHR(10)##/ mNote + ";" + //32. Описание/##CHR(13)##//##CHR(10)##/ ";" + //33. Кратность количества/##CHR(13)##//##CHR(10)##/ "0" + ";" + //34. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //35. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //36. Не используется/##CHR(13)##//##CHR(10)##/ mKkm_section + ";" + //37. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //38. Не используется/##CHR(13)##//##CHR(10)##/ kodGrPintChek + ";" + //39. Код ГП товара/##CHR(13)##//##CHR(10)##/ kodGrPintCopy + ";" + //40. Код ГП копии товара/##CHR(13)##//##CHR(10)##/ ";" + //41. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //42. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //43. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //44. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //45. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //46. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //47. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //48. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //49. Не используется/##CHR(13)##//##CHR(10)##/ ";" + //50. Не используется/##CHR(13)##//##CHR(10)##/ ";"; //51. Не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ //алкогольные реквизиты/##CHR(13)##//##CHR(10)##/ Строка += ";" + //52. Значение флага «Без ввода ШК маркировки»/##CHR(13)##//##CHR(10)##/ mNNVid + ";" + //53. Код вида продукции/##CHR(13)##//##CHR(10)##/ mVolume + ";" + //54. Емкость тары, л./##CHR(13)##//##CHR(10)##/ "1" + ";" + //55. Тип номенклатуры/##CHR(13)##//##CHR(10)##/ ЕСЛИ( ПивнаяПродукция, "1", "0" ) + ";" + //56. Маркировка алкогольной продукции/##CHR(13)##//##CHR(10)##/ mAProc + ";"; //57. Крепость алкогольной продукции /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //прочие реквизиты/##CHR(13)##//##CHR(10)##/ Строка += mPaytype + ";" + //58. Признак способа расчета/##CHR(13)##//##CHR(10)##/ ЕСЛИ( !ПУСТО(mAgentDetailsCode), mAgentDetailsCode, "" ) + ";" + //59. Код реквизитов агента/##CHR(13)##//##CHR(10)##/ ";" + //60. Сумма акциза, включенная в стоимость товара/##CHR(13)##//##CHR(10)##/ ";" + //61. Код страны происхождения товара (допустимы только цифры)/##CHR(13)##//##CHR(10)##/ ";" + //62. Номер таможенной декларации/##CHR(13)##//##CHR(10)##/ ";" + //63. Наименование лотереи/##CHR(13)##//##CHR(10)##/ ";" + //64. Код вида номенклатурной классификации (EAN-13)/##CHR(13)##//##CHR(10)##/ ";" + //65. Проверка соответствия товара штрихкоду маркировки: 0 – по штрихкодам товара; 1 – по штрихкоду регистрации./##CHR(13)##//##CHR(10)##/ mffdcode; //66. Мера количества предмета расчета/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Отмечаем в таблице штриховых кодов, что товар был выгружен/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + ШТРИХКОДЫ + " SET used= 1 WHERE code= ''" + code + "''" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ(1, "СписокТоваров");/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УДАЛИТЬКОНТЕКСТ("СписокТоваров");/##CHR(13)##//##CHR(10)##/ИНДИКАТОР();/##CHR(13)##//##CHR(10)##/СИСТЕМНОЕСООБЩЕНИЕ();/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',212.00000000,'/##CHR(13)##//##CHR(10)##///Выгрузка остатков по разрезам в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Добавляем команду - либо заменить (обновить) информацию о разрезах, либо добавить/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEASPECTREMAINSWITHOUTSALE", "$$$ADDASPECTREMAINS" ) );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT t1.code AS subcode, t1.nngroup, t1.aspect, t1.kolp, t1.cena, t2.code /##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " t2 ON t1.subcode = t2.nn /##CHR(13)##//##CHR(10)##/ WHERE t1.f_subres = 1 AND t1.nngroup <> '''' AND t1.cena >" + IIF( !ТОВАРЫБЕЗЦЕНЫ, "", "=" ) + " 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Проходим по списку значений разрезов и формируем строку кодов/##CHR(13)##//##CHR(10)##/ // Можно было бы пройти просто по l_aspectvalue и по коду комбинации /##CHR(13)##//##CHR(10)##/ // характеристик сформировать список, но важен порядок следования кодов/##CHR(13)##//##CHR(10)##/ // А он есть только в таблице l_aspect, поэтому проходим по ней/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " /##CHR(13)##//##CHR(10)##/ WHERE schemecode= ''" + СписокТоваров.nngroup + "'' /##CHR(13)##//##CHR(10)##/ ORDER BY f_num", "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ counter = 1;/##CHR(13)##//##CHR(10)##/ aspectList = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокРазрезов" ) AND counter <= 5 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Достаем значение разреза /##CHR(13)##//##CHR(10)##/ aspectValue = ALLTRIM( STR( VAL( ЗАПРОС( "SELECT value FROM " + РАЗРЕЗЫТМЦ + " /##CHR(13)##//##CHR(10)##/ WHERE wareaspectcode= ''" + СписокТоваров.aspect + "'' AND /##CHR(13)##//##CHR(10)##/ aspectcode = ''" + СписокРазрезов.aspectcode + "''" ) ) ) );/##CHR(13)##//##CHR(10)##/ // Для тех разрезов, для которых нет значения для данного товара, проставляем специальное значение 999999999/##CHR(13)##//##CHR(10)##/ aspectList = aspectList + IIF( !EMPTY( aspectList ), ",", "" ) + ЕСЛИ( aspectValue == "0", "999999999", aspectValue ); /##CHR(13)##//##CHR(10)##/ counter++;/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ // Если удалось собрать список кодов - формируем строку в файле/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( aspectList ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Строка в формате АТОЛ/##CHR(13)##//##CHR(10)##/ // остаток только если Признак загрузки остатков не равен "не надо загружать"/##CHR(13)##//##CHR(10)##/ Строка = code + ";" + IIF( saldotype <> 0,STR( kolp, 10, 3 ), "0") + ";" + /##CHR(13)##//##CHR(10)##/ aspectList + ";" + ALLTRIM( STR( cena, 8, 2 ) ) + ";;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // Записываем в таблицу штриховых кодов, список разрезов /##CHR(13)##//##CHR(10)##/ ЗАПРОС("UPDATE " + ШТРИХКОДЫ + " SET aspectlist= ''" + aspectList + "'', used= 1, code = ''"+code+"'' WHERE code= ''" + subcode + "''");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',213.00000000,'//Выгрузка штриховых кодов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Штриховые коды идут в конце файла, после всех товаров /##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDBARCODES" );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT koef, barcode, code, aspectlist FROM " + ШТРИХКОДЫ + " /##CHR(13)##//##CHR(10)##/ WHERE used = 1 AND barcode <> '''' ", "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокШтрихКодов" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( barcode ) + ";" + ALLTRIM( code ) + ";" + ALLTRIM( aspectlist ) + ";" + /##CHR(13)##//##CHR(10)##/ ЕСЛИ( _ВЫГРУЖАТЬКОЭФФИЦИЕНТШК_ФРОНТОЛ, ALLTRIM( STRTRAN( koef, ",", ALLTRIM( delimiter ) ) ), "1" ) + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/} /##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокШтрихКодов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',214.00000000,'//Завершение выгрузки товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если надо, то выгружаем алкокоды/##CHR(13)##//##CHR(10)##/IF ( _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгрузка алкокодов /##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDALCCODES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT sprnn.maincode, sprnn.nnvid, sprnn.ed, egais.alcocode,/##CHR(13)##//##CHR(10)##/ dbo.fn_alcotype( sprres.nnvid ) AS alcotype,/##CHR(13)##//##CHR(10)##/ FROM " + ТОВАРЫ + " t1/##CHR(13)##//##CHR(10)##/ INNER JOIN sprnn sprnn ON sprnn.maincode = t1.code/##CHR(13)##//##CHR(10)##/ INNER JOIN sprres_egais egais ON egais.code = sprnn.nn/##CHR(13)##//##CHR(10)##/ WHERE egais.alcocode <> ''''", "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ // Если продукция разливная, то алкокод связываем со второй карточкой, которая для вскрытия тары/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокАлкокодов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mAlco = VAL( СписокАлкокодов.alcotype ) == 1 AND !ВСПИСКЕ( СписокАлкокодов.nnvid, "481" ); /##CHR(13)##//##CHR(10)##/ РазливнойАлко = mAlco AND LOWER( ALLTRIM( СписокАлкокодов.ed ) ) == ''л'';/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, ЕСЛИ( РазливнойАлко, STR( VAL( СписокАлкокодов.maincode ) + 90000000 ), СписокАлкокодов.maincode ) + ";" + СписокАлкокодов.alcocode );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокАлкокодов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Теперь просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/ОЖИДАНИЕ( 5000 );/##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##/*//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',216.00000000,'//Начало выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления различных объектов, если установлены галочки/##CHR(13)##//##CHR(10)##/// Схемы внутренних автоматических скидок/##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИСХЕМ AND !f_rmk ) ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',217.00000000,'//Выгрузка схем скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Схемами скидок являются папки в справочнике скидок, поэтому/##CHR(13)##//##CHR(10)##/// выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления схем скидок/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCSCHMS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "ПапкиСкидок" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',218.00000000,'//Выгрузка папок скидок в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИСКИДОК, "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, STR( ic + 1000000000 ) + ";" + LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/// LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 ) + ";" + /##CHR(13)##//##CHR(10)##/// IIF( parent == 0, "0", ALLTRIM( STR( ABS( parent ) + 1000000000 ) )) + ";1;" +/##CHR(13)##//##CHR(10)##/// IIF( union_type > 0, ALLTRIM( STR( union_type - 1) ), "" ) + ";;;;;;;" );/##CHR(13)##//##CHR(10)##////##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',219.00000000,'//Выгрузка скидок в ККМ. В CE не используется/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со скидок/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + СКИДКИ, "СписокСкидок" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDDISCRATES" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокСкидок" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/// mUnion_type = ALLTRIM( STR( union_type ) );/##CHR(13)##//##CHR(10)##/// mF_auto = IIF( f_auto, "2", "1" );/##CHR(13)##//##CHR(10)##/// mVmin_exists = IIF( !EMPTY( value_min ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mVmax_exists = IIF( !EMPTY( value_max ), "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue_min = ALLTRIM( LEFT( STRTRAN( value_min, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/// mValue_max = ALLTRIM( LEFT( STRTRAN( value_max, ";", " " ), 100 ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = code + ";" + mName + ";" + mCtext + ";" + mParent + ";0;" + mUnion_type + ";" +/##CHR(13)##//##CHR(10)##/// mVtype + ";" + mDsc_value + ";" + mF_auto + ";" + mType_ + ";" + mVmin_exists + ";" + /##CHR(13)##//##CHR(10)##/// mValue_min + ";" + mVmax_exists + ";" + mValue_min;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокСкидок" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',220.00000000,'//Выгрузка условий скидок в ККМ./##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками скидок/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT * FROM " + УСЛОВИЯ, "СписокУсловий" );/##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокУсловий" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDAUTODISCCONDS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокУсловий" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/ mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/ mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/ mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/ mDsc_value = Вычислить( mValue );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mDsc_value = mValue;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ mStart_date = "";/##CHR(13)##//##CHR(10)##/ mEnd_date = "";/##CHR(13)##//##CHR(10)##/ mCdate_day = cdate_day;/##CHR(13)##//##CHR(10)##/ mCdate_month = cdate_month;/##CHR(13)##//##CHR(10)##/ mCdate_code = cdate_code;/##CHR(13)##//##CHR(10)##/ mCdate_day2 = 0;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = 0;/##CHR(13)##//##CHR(10)##/ IF ( ТИП( "cdate_month2" ) != "U" )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day2 = cdate_day2;/##CHR(13)##//##CHR(10)##/ mCdate_month2 = cdate_month2;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 OR cdate_type == 4 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mCdate_day = ЗАПРОС( "SELECT day FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ mCdate_month = ЗАПРОС( "SELECT month FROM sprholidays WHERE code= ''" + mСdate_code + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Берем начальную дату из полей cdate_month, cdate_day/##CHR(13)##//##CHR(10)##/ mStart_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ IF ( cdate_type == 4 AND mCdate_day2 > 0 AND mCdate_month2 > 0 )/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day2 ) ) + "/" + ALLTRIM( STR( mCdate_month2 ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) + ЕСЛИ( mCdate_month2 < mCdate_month, 1, 0 ) ) ) ) );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ mEnd_date = DTOC( CTOD( ALLTRIM( STR( mCdate_day ) ) + "/" + ALLTRIM( STR( mCdate_month ) ) + "/" + ALLTRIM( STR( YEAR( DATE( ) ) ) ) ) );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ mTime_min = IIF( !EMPTY( time_min ), ALLTRIM( time_min ), "" );/##CHR(13)##//##CHR(10)##/ mTime_max = IIF( !EMPTY( time_max ), ALLTRIM( time_max ), "" );/##CHR(13)##//##CHR(10)##/ mWday_min = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_min - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mWday_max = IIF( !EMPTY( wday_min ) OR !EMPTY( wday_max ), ALLTRIM( STR( wday_max - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_min = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mKolp_max = IIF( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ), ALLTRIM( STR( kolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_min = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mSumma_max = IIF( !EMPTY( summa_min ) OR !EMPTY( summa_max ), ALLTRIM( STR( summa_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_min = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCsumma_max = IIF( !EMPTY( csumma_min ) OR !EMPTY( csumma_max ), ALLTRIM( STR( csumma_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mPrefix_min = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_min, "" );/##CHR(13)##//##CHR(10)##/ mPrefix_max = IIF( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ), prefix_max, "" );/##CHR(13)##//##CHR(10)##/ mCena_min = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCena_max = IIF( !EMPTY( cena_min ) OR !EMPTY( cena_max ), ALLTRIM( STR( cena_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_min = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_min, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mCkolp_max = IIF( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ), ALLTRIM( STR( ckolp_max, 10, 4 ) ), "" );/##CHR(13)##//##CHR(10)##/ mTmc_id = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_min = "";/##CHR(13)##//##CHR(10)##/ mTmckolp_max = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_min = "";/##CHR(13)##//##CHR(10)##/ mTmcsumma_max = "";/##CHR(13)##//##CHR(10)##/ mCard_state = ALLTRIM( STR( card_state ) );/##CHR(13)##//##CHR(10)##/ mCardlen_min = "";/##CHR(13)##//##CHR(10)##/ mCardlen_max = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ Строка = mParent + ";" + mCode + ";" + mName + ";" + mCtext + ";" + mVtype + ";" + /##CHR(13)##//##CHR(10)##/ mDsc_value + ";" + mStart_date + ";" + mEnd_date + ";;" + mTime_min + ";" +/##CHR(13)##//##CHR(10)##/ mTime_max + ";;" + mWday_min + ";" + mWday_max + ";;" + mKolp_min + ";" +/##CHR(13)##//##CHR(10)##/ mKolp_max + ";;" + mSumma_min + ";" + mSumma_max + ";;" + mCsumma_min + ";" +/##CHR(13)##//##CHR(10)##/ mCsumma_max + ";;" + mPrefix_min + ";" + mPrefix_max + ";;" + mCena_min + ";" +/##CHR(13)##//##CHR(10)##/ mCena_max + ";;" + mCkolp_min + ";" + mCkolp_max + ";;;" + mTmckolp_min + ";" + /##CHR(13)##//##CHR(10)##/ mTmckolp_max + ";;" + mTmcsumma_min + ";" + mTmcsumma_max + ";;" + mCard_state + ";" +/##CHR(13)##//##CHR(10)##/ mCardlen_min + ";" + mCardlen_max + ";;" + mType_ + ";" + mCode;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокУсловий" );*//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',222.00000000,'//Выгрузка дисконтных карт в ККМ не используется в СЕ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы со списком карт/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КАРТЫ, "СписокКарт" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт /##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCCARDDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКарт" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = IIF( EMPTY( card_type ), "1", ALLTRIM( card_type ) );/##CHR(13)##//##CHR(10)##/// mState = IIF( block, "0", "1" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mValue = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mCard_type = ALLTRIM( card_type );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Обороты по карте и количество посещений расчитываются системой перед началом выгрузки/##CHR(13)##//##CHR(10)##/// mCardSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCardCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate )/##CHR(13)##//##CHR(10)##/// mDsc_value = Вычислить( mValue, "C" );/##CHR(13)##//##CHR(10)##/// ELSE/##CHR(13)##//##CHR(10)##/// mDsc_value = mValue;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mCardn = cardn;/##CHR(13)##//##CHR(10)##/// mStart_date = IIF( EMPTY( str_date ), "", DTOC( str_date ) );/##CHR(13)##//##CHR(10)##/// mEnd_date = IIF( EMPTY( end_date ), "", DTOC( end_date ) );/##CHR(13)##//##CHR(10)##/ // Формируем строку для записи в файл/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mCardn + ";" + mStart_date + ";" + mEnd_date + ";" +/##CHR(13)##//##CHR(10)##/// mState + ";" + mVtype + ";" + mDsc_value + ";" + mType_ + ";;;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКарт" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',223.00000000,'//Выгрузка папок клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с папками клиентов/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + ПАПКИКЛИЕНТОВ, "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "ПапкиКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ), 0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( ABS( ic ) + 1000000000 ) );/##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1) ), "" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Если надо вычислять занчение скидки в момент выгрузки, то вычисляем его/##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";1;;;;;;;;;;;;;;;;" + mDsc_value + ";" + mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "ПапкиКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',224.00000000,'//Выгрузка клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из временной таблицы с клиентами/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT * FROM " + КЛИЕНТЫ, "СписокКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления скидок (команда одна на скидки и на папки)/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTDISCS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mCode = ALLTRIM( STR( VAL( code ) ) );/##CHR(13)##//##CHR(10)##/// mParent = ALLTRIM( STR( IIF( EMPTY( parent ),0, ABS( parent ) + 1000000000 ) ) );/##CHR(13)##//##CHR(10)##/// mSex = ALLTRIM( STR( sex ) );/##CHR(13)##//##CHR(10)##/// mZdate = "";/##CHR(13)##//##CHR(10)##/// mIndex = "";/##CHR(13)##//##CHR(10)##/// mCity = "";/##CHR(13)##//##CHR(10)##/// mWeb = "";/##CHR(13)##//##CHR(10)##/// mInn = "";/##CHR(13)##//##CHR(10)##/// mDoc = "";/##CHR(13)##//##CHR(10)##/// mOkpo = "";/##CHR(13)##//##CHR(10)##/// mOkpd = "";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// mVtype = IIF( vtype > 0, ALLTRIM( STR( vtype - 1 ) ), "" );/##CHR(13)##//##CHR(10)##/// mType_ = IIF( type_ == 1, "1", "0" );/##CHR(13)##//##CHR(10)##/// mDsc_value = ALLTRIM( value );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Обороты и счетчики посещений уже расчитаны в системе до начала выгрузки/##CHR(13)##//##CHR(10)##/// mSaldo = ALLTRIM( STR( saldo, 16, 2 ) );/##CHR(13)##//##CHR(10)##/// mCounter = ALLTRIM( STR( counter ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/// IF ( f_evaluate ) mDsc_value = Вычислить( mDsc_value, "C" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// mName = LEFT( ALLTRIM( STRTRAN( name, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mCtext = LEFT( ALLTRIM( STRTRAN( ctext, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mNote = LEFT( ALLTRIM( STRTRAN( note, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mTelephon = LEFT( ALLTRIM( STRTRAN( telefon, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mAddress = LEFT( ALLTRIM( STRTRAN( address, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mEmail = LEFT( ALLTRIM( STRTRAN( email, ";", " " ) ), 100 );/##CHR(13)##//##CHR(10)##/// mBirthdate = IIF( EMPTY( birthdate ), "", DTOC( birthdate ) );/##CHR(13)##//##CHR(10)##/// mRdate = DTOC( DATE( ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mCode + ";" + mParent + ";" + mName + ";" + mCtext + ";0;" + mNote + ";" +/##CHR(13)##//##CHR(10)##/// mSex + ";" + mZdate + ";" + mBirthdate + ";" + mRdate + ";" + mIndex + ";" + /##CHR(13)##//##CHR(10)##/// mCity + ";" + mAddress + ";" + mEmail + ";" + mWeb + ";" + mTelephon + ";" +/##CHR(13)##//##CHR(10)##/// mInn + ";" + mDoc + ";" + mOkpo + ";" + mOkpd + ";" + mDsc_value + ";" + /##CHR(13)##//##CHR(10)##/// mVtype + ";" + mType_ + ";;;;;;;;;;";/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКлиентов" );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',225.00000000,'//Выгрузка дисконтных карт клиентов в ККМ. не используется в СЕ/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц КЛИЕНТЫ и КАРТЫ/##CHR(13)##//##CHR(10)##///ДобавитьКонтекст( "SELECT cln.code AS clientcode, crd.code AS cardcode/##CHR(13)##//##CHR(10)##/// FROM " + КЛИЕНТЫ + " cln/##CHR(13)##//##CHR(10)##/// INNER JOIN " + КАРТЫ + " crd ON crd.client = cln.code", "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##///ВыбратьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##/// Добавляем в файл команду добавления карт клиентов/##CHR(13)##//##CHR(10)##///ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDCLIENTCCARDS" );/##CHR(13)##//##CHR(10)##///WHILE ( !КонецКонтекста( "СписокКартКлиентов" ) )/##CHR(13)##//##CHR(10)##///{/##CHR(13)##//##CHR(10)##/// mClientCode = ALLTRIM( STR( VAL( clientcode ) ) );/##CHR(13)##//##CHR(10)##/// mCardCode = ALLTRIM( STR( VAL( cardcode ) ) );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Формируем строку в формате АТОЛ/##CHR(13)##//##CHR(10)##/// Строка = mClientCode + ";1;" + mCardCode;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Записываем полученную строку в файл/##CHR(13)##//##CHR(10)##/// ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// SKIP( );/##CHR(13)##//##CHR(10)##///}/##CHR(13)##//##CHR(10)##///УдалитьКонтекст( "СписокКартКлиентов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',226.00000000,'//Выгрузка объектов скидок в ККМ. не используется в СЕ. Выгружаются Акции и мероприятия/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выбираем данные из пересечения временных таблиц ОБЪЕКТЫ и СКИДКИ И ТОВАРОВ/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT DISTINCT sprschem.code, sprschem.start_date, sprschem.end_date, sprschem.name, dsc.ctext, dsc.code AS discount/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprmdiscount_schem sprschem ON temp.schem = sprschem.code/##CHR(13)##//##CHR(10)##/ INNER JOIN specmdiscount dsc ON sprschem.discount = dsc.code", "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEMARKETINGACTIONSBYCODE" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGACTIONS" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокАкций.code + ";" + DTOC( СписокАкций.start_date ) + ";" + DTOC(СписокАкций.end_date ) +/##CHR(13)##//##CHR(10)##/ ";;;" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";1;0;1;1;" );/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПерейтиВНачало( "СписокАкций" );/##CHR(13)##//##CHR(10)##/НомерПоПорядку = 1;/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СписокАкций" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT obj.client_folder, obj.clientfolder_ic, obj.client, obj.card, obj.f_subres,/##CHR(13)##//##CHR(10)##/ obj.ware_folder, obj.warefolder_ic, obj.maincode, obj.discount, obj.aspect,/##CHR(13)##//##CHR(10)##/ ISNULL( dsc.f_condition, 0 ) AS f_condition, dsc.parent AS dsc_parent,/##CHR(13)##//##CHR(10)##/ ware.group_, dsc.card_state, obj.value, obj.f_evaluate/##CHR(13)##//##CHR(10)##/ FROM " + ОБЪЕКТЫ + " obj/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + СКИДКИ + " dsc ON obj.discount = dsc.code/##CHR(13)##//##CHR(10)##/ LEFT OUTER JOIN " + ТОВАРЫВОБЪЕКТАХ + " ware ON obj.nn = ware.code/##CHR(13)##//##CHR(10)##/ WHERE obj.schem = ''" + СписокАкций.code + "''", "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDMARKETINGEVENTS" );/##CHR(13)##//##CHR(10)##/ Строка = "";/##CHR(13)##//##CHR(10)##/ Строка2 = "";/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокОбъектов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( СписокОбъектов.f_evaluate )/##CHR(13)##//##CHR(10)##/ Процент = STR( ВЫЧИСЛИТЬ( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ Процент = STR( VAL( СписокОбъектов.value ), 10, 2 );/##CHR(13)##//##CHR(10)##/ IF ( ware_folder OR !ПУСТО( maincode ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ Строка += ЕСЛИ( !ПУСТО( Строка ), CHR( 149 ), "" ) + IIF( ware_folder, ALLTRIM( STR( 1000000000 + warefolder_ic ) ), ALLTRIM( maincode ) );/##CHR(13)##//##CHR(10)##/ Строка2 += ЕСЛИ( !ПУСТО( Строка2 ), CHR( 149 ), "" ) + Процент;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокОбъектов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, STR( НомерПоПорядку ) + ";" + СписокАкций.code + ";" + STDE( СписокАкций.name ) + ";" + STDE( СписокАкций.ctext ) + ";2;" + Строка + ";;" + Строка2 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ // Теперь записываем условия/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDMARKETINGCONDITIONS" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT * FROM specmdiscount WHERE code = ''" + СписокАкций.discount + "''", "Условие", 1 );/##CHR(13)##//##CHR(10)##/ ВЫБРАТЬКОНТЕКСТ( "Условие" );/##CHR(13)##//##CHR(10)##/ СписокУсловий = "";/##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( summa_min ) OR !EMPTY( summa_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;>=;" + ALLTRIM( STR( summa_min, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";1;<=;" + ALLTRIM( STR( summa_max, 10, 4 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( kolp_min ) OR !EMPTY( kolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;>=;" + ALLTRIM( STR( kolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";2;<=;" + ALLTRIM( STR( kolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( ckolp_min ) OR !EMPTY( ckolp_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;>=;" + ALLTRIM( STR( ckolp_min, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";3;<=;" + ALLTRIM( STR( ckolp_max, 10, 3 ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( prefix_min ) OR !EMPTY( prefix_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";5;1;" + ALLTRIM( prefix_min ) + ";" + ALLTRIM( prefix_max ) + ";" + STR( LEN( ALLTRIM( prefix_min ) ) ) + ";" + STR( LEN( ALLTRIM( prefix_max ) ) ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( time_min ) OR !EMPTY( time_max ) )/##CHR(13)##//##CHR(10)##/ СписокУсловий += STR( НомерПоПорядку ) + ";6;" + ALLTRIM( time_min ) + ";" + ALLTRIM( time_max ) + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ IF ( !EMPTY( wday_min ) OR !EMPTY( wday_max ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СписокУсловий += КодМероприятия + ";7;";/##CHR(13)##//##CHR(10)##/ СписокДней = "";/##CHR(13)##//##CHR(10)##/ day = 1;/##CHR(13)##//##CHR(10)##/ WHILE ( day <= 7 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( wday_min <= wday_max )/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min AND day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ СписокДней += ЕСЛИ( !ПУСТО( СписокДней ), ",", "" ) + ЕСЛИ( day >= wday_min OR day <= wday_max, "1", "0" );/##CHR(13)##//##CHR(10)##/ day++;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ СписокУсловий += СписокДней + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( СписокУсловий ) )/##CHR(13)##//##CHR(10)##/ ФайлЗаписать( ДескрипторФайла, СписокУсловий );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ НомерПоПорядку++;/##CHR(13)##//##CHR(10)##/ Пропустить( 1, "СписокАкций" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокАкций" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',227.00000000,'//Завершение выгрузки скидок в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',228.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ФайлФлаг = ФайлСоздать( path_flag_out );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ФайлФлаг, "");/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ФайлФлаг );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',229.00000000,'//Имя файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла "флага"./##CHR(13)##//##CHR(10)##/RETURN path_flag_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',230.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения количества созданных файлов с данными../##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое, равное количеству созданных файлов./##CHR(13)##//##CHR(10)##/RETURN 1;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',231.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##/RETURN path_out;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',232.00000000,'//Файловый обмен?/##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения является ли обмен файловым обменом./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, если обмен производится посредством файлов, иначе ЛОЖЬ./##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',235.00000000,'//Выгрузка пользователей в ККМ/##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( ФАЙЛ( path_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLUSERS" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Выгружаем справочник пользователей (из справочника работников)/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст( "SELECT code, name, chequetext, profile, password, ex_code FROM " + Пользователи, "СправочникПользователей"); /##CHR(13)##//##CHR(10)##/Выбратьконтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDUSERS" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( "СправочникПользователей" ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + STDE( chequetext ) + ";" + ALLTRIM( profile ) + ";" + STDE( password ) + ";" + STDE( ex_code ) + ";" );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СправочникПользователей" );/##CHR(13)##//##CHR(10)##//*/##CHR(13)##//##CHR(10)##/IF ( ВЫГРУЖАТЬСОТРУДНИКОВ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем справочник сотрудников (из справочника работников)/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT temp.code, temp.name, temp.chequetext, temp.profile, temp.password, temp.ex_code, /##CHR(13)##//##CHR(10)##/ dbo.fn_getchar_ex ( ''SPR'',''S06'', ''ФронтолСправочникСотрудниковПользователь'', sprempl.code, DEFAULT, DEFAULT, DEFAULT) AS empl/##CHR(13)##//##CHR(10)##/ FROM " + Пользователи + " temp/##CHR(13)##//##CHR(10)##/ INNER JOIN sprempl sprempl ON temp.code = sprempl.maincode", "СправочникСотрудников"); /##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDEMPLOYEES");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СправочникСотрудников" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ IF ( VAL( empl ) == 1 )/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";" + code + ";" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, code + ";" + STDE( name ) + ";;" + ex_code + ";" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СправочникСотрудников" );/##CHR(13)##//##CHR(10)##/}*//##CHR(13)##//##CHR(10)##/// Просто закрываем файл/##CHR(13)##//##CHR(10)##/ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',240.00000000,'//Создание файла "флага"./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается для создания файла "флага"./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешного выполнения и ЛОЖЬ, в случае ошибки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ТИП( "_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ" ) == "U" )/##CHR(13)##//##CHR(10)##/ _АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ IF ( !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( !РучнойОбмен )/##CHR(13)##//##CHR(10)##/{ /##CHR(13)##//##CHR(10)##/ //------- Создаем файл флага/##CHR(13)##//##CHR(10)##/ fileName = ALLTRIM( path_flag_in );/##CHR(13)##//##CHR(10)##/ fileHandle = ФайлСоздать( fileName );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //------ Если не получилось создать файл - идем дальше не останавливаясь на данном ККМ/##CHR(13)##//##CHR(10)##/ IF ( fileHandle == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "Не удалось создать файл флага ''" + fileName + "'' для ККМ ''" + ALLTRIM( name ) + "''";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ //------- Записываем в него команды/##CHR(13)##//##CHR(10)##/ commands = "";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 1 )/##CHR(13)##//##CHR(10)##/ commands = "$$$NEWTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 2 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYDATETIMERANGE" + CHR( 13 ) + CHR( 10 );/##CHR(13)##//##CHR(10)##/ commands = commands + TTOC( НАЧАЛОПЕРИОДА ) + ";" + TTOC( КОНЕЦПЕРИОДА ) + ";";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 3 )/##CHR(13)##//##CHR(10)##/ commands = "$$$TRANSACTIONSBYSESSIONSRANGE" + CHR(13) + CHR(10) + ПЕРВАЯСМЕНА + ";" + ПОСЛЕДНЯЯСМЕНА;/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 4 )/##CHR(13)##//##CHR(10)##/ commands = "$$$ALLTRANSACTIONS";/##CHR(13)##//##CHR(10)##/ IF ( ПЕРИОДЗАГРУЗКИ == 5 )/##CHR(13)##//##CHR(10)##/ commands = "$$$LASTSESSIONTRANSACTIONS";/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ //-------- Для ККМ ШТРИХ - команды не нужны/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( fileHandle, commands );/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( fileHandle );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',241.00000000,'/##CHR(13)##//##CHR(10)##///Проверка наличия данных для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае наличия данных для загрузки и ЛОЖЬ, в случае их отсутствия./##CHR(13)##//##CHR(10)##/// Проверяем наличие самих файлов и возможность чтения данных из них /##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/ИмяФайлаФлага = path_flag_in;/##CHR(13)##//##CHR(10)##/РучнойОбмен = f_fileflag;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ ИмяФайлаФлага = ЗАПРОС( "SELECT path_flag_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/ РучнойОбмен = ЗАПРОС( "SELECT f_fileflag_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ЕстьФайлы = false;/##CHR(13)##//##CHR(10)##/ИмяФайла = ФайлНайти( СжатьПробелы( ИмяФайла ) );/##CHR(13)##//##CHR(10)##/ФайлЗакончитьПоиск( );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Пытаемся открыть файл. Файл может существовать, но быть занят, /##CHR(13)##//##CHR(10)##/// например, он в процессе формирования, поэтому его не удасться загрузить/##CHR(13)##//##CHR(10)##/IF ( !ПУСТО( ИмяФайла ) AND ( РучнойОбмен OR !ФАЙЛ( ИмяФайлаФлага ) OR !EMPTY( exchangeservice_in ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла >= 0 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ЕстьФайлы = true;/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( ИмяФайла ) AND РучнойОбмен )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ СООБЩЕНИЕ( "Для кассы """ + ЗАПРОС( "SELECT name FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) + """ нет файлов для загрузки" );/##CHR(13)##//##CHR(10)##/ RETURN true;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ЕстьФайлы;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',242.00000000,'//Количество файлов с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///Обработка вызывается в случае файлового обмена для определения количества файлов для загрузки./##CHR(13)##//##CHR(10)##///Обработка должна вернуть число целое равное количеству найденых файлов для загрузки./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Необходимо посчитать сколько есть файлов для загрузки /##CHR(13)##//##CHR(10)##/// Если производится автоматическая загрузка службой, то читаем альтернативные параметры имен файлов/##CHR(13)##//##CHR(10)##/IF ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ OR ТИП( "АВТОМАТИЧЕСКАЯЗАГРУЗКА" ) == "U" )/##CHR(13)##//##CHR(10)##/ АВТОМАТИЧЕСКАЯЗАГРУЗКА = false;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ИмяФайла = path_in;/##CHR(13)##//##CHR(10)##/path_in_alter = ЗАПРОС( "SELECT path_in_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" );/##CHR(13)##//##CHR(10)##/IF ( АВТОМАТИЧЕСКАЯЗАГРУЗКА AND !ПУСТО( path_in_alter ) )/##CHR(13)##//##CHR(10)##/ ИмяФайла = path_in_alter;/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/КоличествоФайлов = ФайлСписок( СжатьПробелы( ИмяФайла ), "ИменаФайловДляЗагрузки");/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN КоличествоФайлов;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',243.00000000,'//Имя файла с данными./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///НомерФайла число целое. Указывает номер файла, если файлов с данными больше одного, имя которого необходимо вернуть./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения имени указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть стороку, содержащую имя файла./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN ИменаФайловДляЗагрузки[ НомерФайла - 1 ];',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',244.00000000,'//Проверка возможности загрузки файла./##CHR(13)##//##CHR(10)##///Параметры - /##CHR(13)##//##CHR(10)##///КодОборудования строка. Код ККМ в справочнике оборудования./##CHR(13)##//##CHR(10)##///ИмяФайла строка, имя файла, проверку которого необходимо произвести./##CHR(13)##//##CHR(10)##///Обработка вызывается для определения возможности загрузки указанного файла с данными./##CHR(13)##//##CHR(10)##///Обработка должна вернуть ИСТИНУ, в случае успешной проверки. Если обработка возвращает ЛОЖЬ, то загрузка файла с данными не производится./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Возвращаем ИСТИНУ, если не стоит признак f_checkdone, иначе открываем файл и проверяем первый символ/##CHR(13)##//##CHR(10)##/checkResult = true;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ПроверятьПризнакЗагрузки = ЕСЛИ( !_АЛЬТЕРНАТИВНЫЕПАРАМЕТРЫ, f_checkdone, ЗАПРОС("SELECT f_checkdone_alter FROM sprequipment WHERE code = ''" + КОДОБОРУДОВАНИЯ + "''" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПроверятьПризнакЗагрузки )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Файл = ФайлОткрыть( ИмяФайла );/##CHR(13)##//##CHR(10)##/ checkResult = ФайлПрочитать( Файл, "S" ) == "#";/##CHR(13)##//##CHR(10)##/ ФайлЗакрыть( Файл );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN checkResult;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',201.00000000,'// Параметр, отвечает за необходимость дописывать к наименованию товара его вес или объем/##CHR(13)##//##CHR(10)##/// значение "0" - не дописывать, любое другое значение - дописывать/##CHR(13)##//##CHR(10)##/IN_PARAM_NAME_WEIGHT = 1;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬАЛКОКОДЫ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ОПРЕДЕЛЯТЬППР_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##/IF ( ТИП( "_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52" ) == "U" )/##CHR(13)##//##CHR(10)##/ _ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52 = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##///Подготовка к выгрузке данных в ККМ./##CHR(13)##//##CHR(10)##///------ Если указанный файл-флаг уже существует, это говорит о том, что предыдущие данные еще не были загружены в ККМ, поэтому в эту ККМ данные не выгружаем/##CHR(13)##//##CHR(10)##/_КОДОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ТЕКСТОШИБКИ = "";/##CHR(13)##//##CHR(10)##/_ОШИБКАВЫПОЛНЕНИЯ = false;/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( ПУСТО( exchangeservice_out ) AND !ПУСТО( path_flag_out ) AND ФАЙЛ( ALLTRIM( path_flag_out ) ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Обнаружены необработанные данные (найден файл-флаг " + /##CHR(13)##//##CHR(10)##/ ALLTRIM( path_flag_out ) + "), поэтому новые данные выгружены не были.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',204.00000000,'//Начало выгрузки товаров в /##CHR(13)##//##CHR(10)##/// Если уже есть не обработанный файл с данными, то дописываем его/##CHR(13)##//##CHR(10)##/ПроверкаФлага = "";/##CHR(13)##//##CHR(10)##/ДескрипторФайла = -1;/##CHR(13)##//##CHR(10)##/IF ( FileExists( path_out ) AND ПУСТО( exchangeservice_out ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлОткрыть( path_out, 0, 1 );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось открыть файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Первую строку пропускаем/##CHR(13)##//##CHR(10)##/ ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/ // Во второй строке первый символ указывает на то был ли файл обработан ККМ/##CHR(13)##//##CHR(10)##/ ПроверкаФлага = ФайлПрочитать( ДескрипторФайла, "S" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/IF ( LEFT( ПроверкаФлага, 1 ) == "#" )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Переходим в конец файла/##CHR(13)##//##CHR(10)##/ ФайлУстановитьУказатель( ДескрипторФайла, 0, 0, 2 );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если файл уже существовал, то закрываем его/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла != -1 ) ФайлЗакрыть( ДескрипторФайла );/##CHR(13)##//##CHR(10)##/ // Создаем новый файл/##CHR(13)##//##CHR(10)##/ ДескрипторФайла = ФайлСоздать( path_out );/##CHR(13)##//##CHR(10)##/ IF ( ДескрипторФайла == -1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ _КОДОШИБКИ = "001";/##CHR(13)##//##CHR(10)##/ _ТЕКСТОШИБКИ = "ККМ ''" + ALLTRIM( name ) + "''. Не удалось создать файл для выгрузки данных ''" + ALLTRIM( path_out ) + "''.";/##CHR(13)##//##CHR(10)##/ _ОШИБКАВЫПОЛНЕНИЯ = true;/##CHR(13)##//##CHR(10)##/ RETURN false;/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "##@@&&" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "#" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/// Для ККМ АТОЛ даем команды удаления ТМЦ. /##CHR(13)##//##CHR(10)##/IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Если указано очистить список товаров в ККМ, подаем команду общей очистки/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEALLWARES" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/ELSE/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Иначе подаем команды на удаление отдельных товаров/##CHR(13)##//##CHR(10)##/ IF ( saldotype <> 1 AND !СОХРАНЯТЬТОВАРЫ )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$DELETEWARESBYWARECODE" );/##CHR(13)##//##CHR(10)##/ // Достаем список выгружаемых товаров, проходим по нему и записываем команду удаления для каждого товара/##CHR(13)##//##CHR(10)##/ IF ( aspecttype == 2 ) /##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ + " WHERE f_subres = 0", "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT code FROM " + ТОВАРЫ, "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ Выбратьконтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СписокТоваров" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СписокТоваров.code );/##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СписокТоваров" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF ( f_nalogs )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем налоговые группы/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXRATES" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name, proc_, ntype, ex_code FROM sprkodn WHERE proc_ <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ) + " ORDER BY proc_", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ НомерНалогаВККМ = ЕСЛИ( ПУСТО( СписокНалогов.ntype ), ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "4", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "05", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "2", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "06", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "3", СписокНалогов.ex_code ), /##CHR(13)##//##CHR(10)##/ ЕСЛИ( СписокНалогов.ntype == "07", ЕСЛИ( ПУСТО( СписокНалогов.ex_code ), "1", СписокНалогов.ex_code ), "" ) ) ) );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) )+ ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";0;" + STR( СписокНалогов.proc_ ) + ";" + НомерНалогаВККМ );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT code, name FROM sprlistkodn ORDER BY code", "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СписокНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPS" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + СписокНалогов.name + ";" + СписокНалогов.name + ";" );/##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ( "SELECT list FROM speclistkodn WHERE code = ''" + СписокНалогов.code + "'' AND ( SELECT proc_ FROM sprkodn WHERE code= speclistkodn.list ) <> " + ЕСЛИ( ГОД( ДАТА( ) ) < 2019, "20", "18" ), "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDTAXGROUPRATES" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КОНЕЦКОНТЕКСТА( "СоставНалогов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СписокНалогов.code ) ) + ";" + STR( VAL( СоставНалогов.list ) ) + ";0;" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СоставНалогов" );/##CHR(13)##//##CHR(10)##/ ПРОПУСТИТЬ( 1, "СписокНалогов" );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УДАЛИТЬКОНТЕКСТ( "СписокНалогов" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/IF (_ВЫГРУЖАТЬРЕКВИЗИТЫАГЕНТОВ_ФРОНТОЛ52)/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ //очистка реквизитов агента при установке флага очистки ККМ перед загрузкой/##CHR(13)##//##CHR(10)##/ IF ( ПРИЗНАКОЧИСТКИККМ )/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$DELETEALLAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ДОБАВИТЬКОНТЕКСТ("SELECT code, name, inn, legal_adress, telefon, agent_type, agent_oper, agent_telephone_pa, agent_name_op, agent_inn_op, agent_address_op, agent_telephone_op, agent_telephone_pp/##CHR(13)##//##CHR(10)##/ FROM sprclient /##CHR(13)##//##CHR(10)##/ WHERE code IN (SELECT sprres.vendor FROM sprres sprres/##CHR(13)##//##CHR(10)##/ INNER JOIN " + ТОВАРЫ + " temp ON temp.nn = sprres.code AND sprres.f_agentware = 1 )","ПоставщикиАгенты");/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (КОЛИЧЕСТВОСТРОК("ПоставщикиАгенты") > 0)/##CHR(13)##//##CHR(10)##/ ФАЙЛЗАПИСАТЬСТРОКУ( ДескрипторФайла, "$$$ADDAGENTDETAILS" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "ПоставщикиАгенты" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ //формируем строку реквизитов, только обязательными для конкретного типа агента реквизитами для того чтобы правильно формировались тэги в чеке/##CHR(13)##//##CHR(10)##/ IF ( VAL(ПоставщикиАгенты.agent_type) == 0 OR VAL(ПоставщикиАгенты.agent_type) == 1 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";;;;;" + LEFT( ПоставщикиАгенты.agent_telephone_pp , 100 ) + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 2 OR VAL(ПоставщикиАгенты.agent_type) == 3 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";" + /##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( ПоставщикиАгенты.agent_oper ), 24 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_pa, 100 ) + ";" + LEFT ( ПоставщикиАгенты.agent_name_op, 64 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT ( ПоставщикиАгенты.agent_inn_op, 10) + ";" + LEFT( ПоставщикиАгенты.agent_address_op , 256 ) + ";" + LEFT( ПоставщикиАгенты.agent_telephone_op , 100 ) + ";;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE IF ( VAL(ПоставщикиАгенты.agent_type) == 4 OR VAL(ПоставщикиАгенты.agent_type) == 5 OR VAL(ПоставщикиАгенты.agent_type) == 6 )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = STR(VAL(ПоставщикиАгенты.code)) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 100 ) + ";" + ПоставщикиАгенты.agent_type + ";;;;;;;;" +/##CHR(13)##//##CHR(10)##/ LEFT( ПоставщикиАгенты.telefon , 100 ) + ";" + LEFT( ALLTRIM( ПоставщикиАгенты.name ), 256 ) + ";" + LEFT ( ПоставщикиАгенты.inn, 10);/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ELSE/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ СтрокаПоставщика = "";/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ IF (!ПУСТО(СтрокаПоставщика))/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, СтрокаПоставщика );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ SKIP( 1 );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ПоставщикиАгенты" ); /##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',205.00000000,'//Выгрузка папок товаров в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Записываем команду добавления товаров/##CHR(13)##//##CHR(10)##/ФайлЗаписатьСтроку( ДескрипторФайла, IIF( saldotype == 1, "$$$REPLACEQUANTITYWITHOUTSALE", "$$$ADDQUANTITY" ) );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Из временной таблицы достаем список папок товаров, сортируя его по родительской папке /##CHR(13)##//##CHR(10)##/КодСтруктурыТоваров = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S02'' ) " );/##CHR(13)##//##CHR(10)##/КодСтруктурыУслуг = ЗАПРОС( "SELECT dbo.fn_getsuitabletree( dbo.fn_getdefaultviewpoint( ), ''RPT'', ''SPR'', ''S05'' ) " );/##CHR(13)##//##CHR(10)##/ДобавитьКонтекст("SELECT name, ic, /##CHR(13)##//##CHR(10)##/ CASE WHEN parent IN (SELECT ic FROM spectree/##CHR(13)##//##CHR(10)##/ WHERE code IN ( ''" + КодСтруктурыТоваров + "'', ''" + КодСтруктурыУслуг + "'') AND /##CHR(13)##//##CHR(10)##/ folder= 1 AND parent= 0 ) THEN 0 ELSE parent END AS parent/##CHR(13)##//##CHR(10)##/ FROM (/##CHR(13)##//##CHR(10)##/ SELECT name, ic, parent, identity_column/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S02'', 0, ''" + КодСтруктурыТоваров + "'', 0 ) AS tmcfolders/##CHR(13)##//##CHR(10)##/ UNION SELECT name, ic, parent, identity_column + 100000000/##CHR(13)##//##CHR(10)##/ FROM dbo.fn_getfolders ( ''S05'', 0, ''" + КодСтруктурыУслуг + "'', 0 ) AS srvfolders/##CHR(13)##//##CHR(10)##/ ) AS folders/##CHR(13)##//##CHR(10)##/ WHERE ic IN ( SELECT ic FROM " + ПАПКИ + ")/##CHR(13)##//##CHR(10)##/ ORDER BY identity_column", "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/ВыбратьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##/WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( ABS( ic ) + IIF( ic < 0, 2000000000, 1000000000 ) ) ) + ";" + //1. идентификатор/##CHR(13)##//##CHR(10)##/ ";" + //2. /##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //3. наименование/##CHR(13)##//##CHR(10)##/ LEFT( STRTRAN( ALLTRIM( name ), ";", " "), 100) + ";" + //4. текст/##CHR(13)##//##CHR(10)##/ ";" + //5. /##CHR(13)##//##CHR(10)##/ ";" + //6. /##CHR(13)##//##CHR(10)##/ ";" + //7. не используется/##CHR(13)##//##CHR(10)##/ ";" + //8. /##CHR(13)##//##CHR(10)##/ "0.00" + ";" + //9. минимальная цена/##CHR(13)##//##CHR(10)##/ ";" + //10. /##CHR(13)##//##CHR(10)##/ "0" + ";" + //11. код схемы разрезов/##CHR(13)##//##CHR(10)##/ ";" + //12. /##CHR(13)##//##CHR(10)##/ ";" + //13. /##CHR(13)##//##CHR(10)##/ ";" + //14. /##CHR(13)##//##CHR(10)##/ ";" + //15. не используется/##CHR(13)##//##CHR(10)##/ ALLTRIM( STR( IIF( EMPTY( parent ), "", ABS( parent ) + IIF(ic < 0, 2000000000, 1000000000 ) ) ) ) + ";" + //16.код родительской группы/##CHR(13)##//##CHR(10)##/ "0" + ";" + //17. товар или группа. "0" для группы/##CHR(13)##//##CHR(10)##/ ";" + //18. /##CHR(13)##//##CHR(10)##/ ";" + //19. /##CHR(13)##//##CHR(10)##/ ";" + //20. /##CHR(13)##//##CHR(10)##/ ";" + //21. /##CHR(13)##//##CHR(10)##/ ";" + //22. /##CHR(13)##//##CHR(10)##/ ";" + //23. код налоговой группы/##CHR(13)##//##CHR(10)##/ ";" + //24. /##CHR(13)##//##CHR(10)##/ ";" + //25. /##CHR(13)##//##CHR(10)##/ ";" + //26. артикул/##CHR(13)##//##CHR(10)##/ ";" + //27. тип скидки/##CHR(13)##//##CHR(10)##/ ";" + //28. значение скидки/##CHR(13)##//##CHR(10)##/ ";" + //29. максимальная скидка/##CHR(13)##//##CHR(10)##/ ";" + //30. /##CHR(13)##//##CHR(10)##/ ";" + //31. файл с картинкой/##CHR(13)##//##CHR(10)##/ ";" + //32. описание/##CHR(13)##//##CHR(10)##/ ";" + //33. /##CHR(13)##//##CHR(10)##/ ";" + //34. /##CHR(13)##//##CHR(10)##/ ";" + //35. /##CHR(13)##//##CHR(10)##/ ";" + //36. /##CHR(13)##//##CHR(10)##/ ";" + //37./##CHR(13)##//##CHR(10)##/ ";" + //38./##CHR(13)##//##CHR(10)##/ ";" + //39. код группы печати чека/##CHR(13)##//##CHR(10)##/ ";" + //40. код группы печати копии/##CHR(13)##//##CHR(10)##/ ";" + //41. код группы печати счета/##CHR(13)##//##CHR(10)##/ ";" + //42. код группы печати марки/##CHR(13)##//##CHR(10)##/ ";"; //43. код предприятия/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/УдалитьКонтекст( "СписокПапок" );/##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/RETURN true;/##CHR(13)##//##CHR(10)##/',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',206.00000000,'//Выгрузка разрезов в ККМ./##CHR(13)##//##CHR(10)##//##CHR(13)##//##CHR(10)##/// Если в карточке оборудования стоит признак выгружать разрезы товаров, то выгружаем их/##CHR(13)##//##CHR(10)##/IF ( f_razr AND ( aspecttype == 2 OR aspecttype == 0) )/##CHR(13)##//##CHR(10)##/{/##CHR(13)##//##CHR(10)##/ // Выгружаем схемы разрезов/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, name FROM " + СХЕМЫРАЗРЕЗОВ, "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTSCHMS" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( "СхемыРазрезов" ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + LEFT( ALLTRIM( name ), 100 ) + ";" +/##CHR(13)##//##CHR(10)##/ LEFT( ALLTRIM( name ), 100 ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Теперь выгружаем сами разрезы/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTS" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ ПерейтиВНачало( );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, f_num, name FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE schemecode = ''" + СхемыРазрезов.schemecode + "''", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( schemecode ) ) ) + ";" + STR( f_num, 1 ) + ";" + mName + ";" + mName;/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ // У использованых записей проставляем поле id, для того, чтобы корректно выгрузить значения разрезов/##CHR(13)##//##CHR(10)##/ ЗАПРОС( "UPDATE " + СОСТАВСХЕМРАЗРЕЗОВ + " SET id= " + STR( f_num ) + " WHERE schemecode= ''" + schemecode + "'' AND f_num= " + STR( f_num ) );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СхемыРазрезов" );/##CHR(13)##//##CHR(10)##/ /##CHR(13)##//##CHR(10)##/ // Выгружаем значения разрезов/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, "$$$ADDASPECTVALUES" );/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT schemecode, id, aspectcode FROM " + СОСТАВСХЕМРАЗРЕЗОВ + " WHERE id <> 0", "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ // Выгружаем список значений разрезов соответствующий текущей строке состава схемы/##CHR(13)##//##CHR(10)##/ ДобавитьКонтекст( "SELECT aspectcode, valuecode, name FROM " + ЗНАЧЕНИЯРАЗРЕЗОВ + " WHERE aspectcode = ''" + СоставСхемы.aspectcode + "''", "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ WHILE ( !КонецКонтекста( ) )/##CHR(13)##//##CHR(10)##/ {/##CHR(13)##//##CHR(10)##/ mName = LEFT( ALLTRIM( name ), 100 );/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";" + STR( VAL( valuecode ) ) + ";" + mName + ";" + mName + ";";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ }/##CHR(13)##//##CHR(10)##/ // Для каждого разреза добавляем специальное "пустое" значение с кодом 999999999/##CHR(13)##//##CHR(10)##/ Строка = ALLTRIM( STR( VAL( СоставСхемы.schemecode ) ) ) + ";" + STR( СоставСхемы.id, 1 ) + ";999999999;;;";/##CHR(13)##//##CHR(10)##/ ФайлЗаписатьСтроку( ДескрипторФайла, Строка );/##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "ЗначенияРазрезов" );/##CHR(13)##//##CHR(10)##/ ВыбратьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/ SKIP( );/##CHR(13)##//##CHR(10)##/ } /##CHR(13)##//##CHR(10)##/ УдалитьКонтекст( "СоставСхемы" );/##CHR(13)##//##CHR(10)##/}/##CHR(13)##//##CHR(10)##/RETURN true;',0,0,1,0,'22.02.2024 14:44:21') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Обмен данными с Фронтол XPos 3 (вскрытие тары)','ККМ',0.00000000,'Профиль обмена с программным обеспечением Frontol xPOS 3.11.4 и выше. Совместим с Айтида, начиная с версии 4.5.0. Поддерживает выгрузку мерного алкоголя двумя карточками: одна карточка товара с алкопризнаками для вскрытия, вторая - обычный товар для',0.00000000,7611.00000000,0,'',0.00000000,'','',0,'69EB87ED-931A-4AAD-98D3-F30C910B3E1D',0,1,0,'22.02.2024 14:44:21') #begin #description Принтер чеков (драйвер Атол V8) #name Принтер чеков (драйвер Атол V8) #code 0000000242 #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',80.00000000,'//Инициализация ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_Инициализация( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',81.00000000,'//Активизация ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_Активизация( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',82.00000000,'//Деактивация ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_Деактивизация( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',125.00000000,'//Наименование модели ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_НаименованиеМодели( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',126.00000000,'//Свойства драйвера ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_СвойстваДрайвера( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',127.00000000,'//Имя устройства принтера чеков./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_ИмяУстройства( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',128.00000000,'//Количество зарегистрированных устройств в драйвере ФР./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_КоличествоУстройств( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO speceqprofiles (CODE,ACTION_ID,ACTION_SCRIPT,F_CHECK,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('----------',134.00000000,'//Печать пречека./##CHR(13)##//##CHR(10)##/RETURN EQUIPMENT.ПЧАтол_ПечатьПречека( ФР.КОДОБОРУДОВАНИЯ() );',0,0,1,0,'22.02.2024 14:44:32') #command INSERT INTO spreqprofiles (CODE,EX_CODE,NAME,TYPE,PORT,NOTE,PARENT,POSORDER,NOTAVAIL,MAINDB,MAINIC,CACCESS,TACCESS,FOLDER,RID,FARC,UPDATED,RECEIVED,EDIT_DAT) VALUES ('','','Принтер чеков (драйвер Атол V8)','ФР',0.00000000,'',0.00000000,7618.00000000,0,'',0.00000000,'','',0,'CBE6F04C-DD04-4BE3-ADA5-6312E109821B',0,1,0,'22.02.2024 14:44:32')